国产探花免费观看_亚洲丰满少妇自慰呻吟_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()

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开阳县| 东阳市| 吉水县| 北宁市| 富源县| 屏东市| 含山县| 万安县| 天柱县| 电白县| 江达县| 泽州县| 莱芜市| 盐源县| 西盟| 遵义市| 海南省| 吴川市| 托克逊县| 莱西市| 泽库县| 金寨县| 乌海市| 克山县| 肥西县| 讷河市| 突泉县| 苍溪县| 攀枝花市| 河源市| 乌兰浩特市| 油尖旺区| 广水市| 延川县| 资源县| 西林县| 满洲里市| 苏尼特左旗| 七台河市| 开江县| 高安市|