Python:如何计算多线程下载速度

时间:2016-07-01 07:46:36

标签: python multithreading python-requests

我写了一个多线程http下载器,现在它可以比单线程下载器更快地下载文件,并且MD5总和是正确的。但是,我发现它显示的速度是如此之快,以至于我认为它不是真正的价值。enter image description here 单元尚未打印,但我确定它是KB / s,请查看我的代码,了解该措施。

 # Setup the slaver
    def _download(self):
        # Start download partital content when queue not empty
        while not self.configer.down_queue.empty():
            data_range = self.configer.down_queue.get()
            headers = {
                'Range': 'bytes={}-{}'.format(*data_range)
            }
            response = requests.get(
                self.configer.url, stream = True,
                headers = headers
            )
            start_point = data_range[0]
            for bunch in response.iter_content(self.block_size):
                _time = time.time()
                with self.file_lock:
                    with open(
                        self.configer.path, 'r+b',
                        buffering = 1
                    ) as f:
                        f.seek(start_point)
                        f.write(bunch)
                        f.flush()
                start_point += self.block_size
                self.worker_com.put((
                    threading.current_thread().name,
                    int(self.block_size / (time.time() - _time))
                ))
            self.configer.down_queue.task_done()

    # speed monitor
    def speed_monitor(self):
        while len(self.thread_list)>0:
            try:
                info = self.worker_com.get_nowait()
                self.speed[info[0]] = info[1]
            except queue.Empty:
                time.sleep(0.1)
                continue
            sys.stdout.write('\b'*64 + '{:10}'.format(self.total_speed)
                + '  thread num ' + '{:2}'.format(self.worker_count))
            sys.stdout.flush()

如果您需要更多信息,请访问my github respository。如果你能指出我的错误,我将不胜感激。感谢。

0 个答案:

没有答案