国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python多線程http下載實現示例

2020-02-23 05:02:31
字體:
來源:轉載
供稿:網友

測試平臺 Ubuntu 13.04 X86_64 Python 2.7.4

花了將近兩個小時, 問題主要剛開始沒有想到傳一個文件對象到線程里面去, 導致下載下來的文件和源文件MD5不一樣,浪費不少時間.

有興趣的同學可以拿去加上參數,改進下, 也可以加上斷點續傳.

代碼如下:
# -*- coding: utf-8 -*-
# Author: ToughGuy
# Email: wj0630@gmail.com
# 寫這玩意兒是為了初步了解下python的多線程機制
# 平時沒寫注釋的習慣, 這次花時間在代碼里面寫上注釋也是希望有問題的地方請各位指正, 因為可能我自己也沒弄明白.
# 測試平臺 Ubuntu 13.04 X86_64 Python 2.7.4

import threading
import urllib2
import sys

max_thread = 10
# 初始化鎖
lock = threading.RLock()

class Downloader(threading.Thread):
    def __init__(self, url, start_size, end_size, fobj, buffer):
        self.url = url
        self.buffer = buffer
        self.start_size = start_size
        self.end_size = end_size
        self.fobj = fobj
        threading.Thread.__init__(self)

    def run(self):
        """
            馬甲而已
        """
        with lock:
            print 'starting: %s' % self.getName()
        self._download()

    def _download(self):
        """
            我才是搬磚的
        """
        req = urllib2.Request(self.url)
        # 添加HTTP Header(RANGE)設置下載數據的范圍
        req.headers['Range'] = 'bytes=%s-%s' % (self.start_size, self.end_size)
        f = urllib2.urlopen(req)
        # 初始化當前線程文件對象偏移量
        offset = self.start_size
        while 1:
            block = f.read(self.buffer)
            # 當前線程數據獲取完畢后則退出
            if not block:
                with lock:
                    print '%s done.' % self.getName()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泸西县| 黑山县| 德阳市| 丹巴县| 丹寨县| 鄂托克旗| 游戏| 远安县| 美姑县| 潞城市| 大渡口区| 南城县| 瑞昌市| 凤台县| 寿阳县| 正定县| 纳雍县| 英山县| 左权县| 鲁甸县| 卢湾区| 健康| 新丰县| 漠河县| 都兰县| 通城县| 汉阴县| 泰顺县| 醴陵市| 监利县| 景德镇市| 临澧县| 聂拉木县| 磐石市| 甘南县| 山西省| 徐闻县| 汕头市| 松滋市| 平舆县| 忻城县|