我有一个简单的脚本,可以使用请求库从python中的远程服务器下载大小为300MB的文件。我正在考虑使用线程模块和队列模块减少下载时间,并且我正在尝试弄清楚如何使用这些模块
我考虑过拥有4个线程并将文件大小分成四个块和每个线程。我的请求下载代码现在看起来像这样。
import threading
import Queue
import requests
queue = Queue.Queue()
class downloadThread(threading.Thread):
def __init__(self,queue):
self.inQueue = queue
def run():
while True:
url = self.inQueue.get()
resp = requests.get(url,stream=True)
with open('/tmp/app.zip','wb') as f:
for chunk in resp.iter_contents(chunk_size=1024):
if chunk:
f.write(chunk)
f.flush()
if __name__ == '__main__':
for x in range(3):
t = downloadThread(queue)
t.setDaemon(True)
t.start()
queue.put(http://urltofile')
当使用iter_contents检索内容时,我可以提供chunk_size但是有没有办法提到从1024开始并处理块直到2048?由于我打算使用线程1下载0到1024而线程2用来处理1025到2048等等。
我必须处理以不同逻辑编写文件。我打算将块读入另一个队列和inQueue,然后将它们写入文件。截至目前,我正在试图弄清楚如何在线程之间拆分文件块。
由于