我想使用扭曲和(例如)20個客戶端線程從隊列中下載多個文件。任何示例?使用隊列下載扭曲的文件
4
A
回答
-2
8
from twisted.internet.defer import inlineCallbacks, DeferredQueue
@inlineCallbacks
def worker(queue):
while 1:
url = yield queue.get() # wait for a url from the queue
if url is None: # insert None into the queue to kill workers
queue.put(None)
return # done
data = yield download(url) # download the file
process(data) # do stuff with it
queue = DeferredQueue() # your queue
# make workers
MAX = 20
workers = [worker(queue) for _ in range(MAX)]
2
以下是https://github.com/caolan/async到Python的翻譯。
from twisted.internet import defer
class Queue:
workers = 0
tasks = []
def __init__(self, worker, concurrency):
self.worker = worker
self.concurrency = concurrency
self.saturated = None
self.empty = None
self.drain = None
def push(self, data):
deferred = defer.Deferred()
self.tasks.append({'data': data, 'callback': deferred})
if self.saturated and len(tasks) == concurrency:
self.saturated()
self.process()
return deferred
def task_finished(self, *args):
self.workers = self.workers - 1
if self.drain and len(self.tasks) + self.workers == 0:
self.drain()
self.process()
def process(self):
if self.workers >= self.concurrency or len(self.tasks) == 0:
return
task = self.tasks.pop(0)
if self.empty and len(self.tasks) == 0:
self.empty()
self.workers = self.workers + 1
d = self.worker(task['data'])
d.addCallback(self.task_finished)
d.addCallback(task['callback'].callback)
from twisted.web import client
from twisted.internet import reactor
def dl_worker(data):
url = data[0]
fname = data[1]
print "Download file:", fname
d = client.downloadPage(url, fname)
return d # very important!
q = Queue(dl_worker, 2)
q.drain = reactor.stop
for i in range(0,3):
q.push(["http://download.thinkbroadband.com/5MB.zip", "file"+str(i)])
reactor.run()
我希望通過雕文的QC:D乾杯!
相關問題
- 1. 扭曲CPU隊列任務的隊列
- 2. 在扭曲中使用上下文
- 3. 使用扭曲
- 4. php上的文件下載隊列
- 5. AFNetworking:下載隊列中的文件
- 6. 如何使用扭曲加載自定義配置文件?
- 7. HHTML表中的扭曲下拉列表
- 8. 使用捲曲下載文件
- 9. 使用捲曲下載多個文件
- 10. 使用捲曲下載文件
- 11. 使用捲曲下載大文件
- 12. Python的扭曲:扭曲海螺文件傳輸verifyHostKey
- 13. 使用扭曲doctest
- 14. 的Java文件複製扭曲文件
- 15. 讀取文件,扭曲
- 16. FileSystemWatcher扭曲文件名
- 17. 用扭曲的方式監視文件
- 18. Node.js:同步文件下載隊列
- 19. 隊列XAP文件下載請求
- 20. 使用扭曲的線程
- 21. 用sqlite排序併發隊列實現(扭曲)?
- 22. 扭曲和扭曲Movieclip
- 23. 捲曲API調用下載的文件
- 24. 扭轉隊列的方法
- 25. 運行下扭曲網
- 26. 使用DeferredQueue在扭曲
- 27. 使用調度隊列快速下載
- 28. 如何加密扭曲的文件?
- 29. 扭曲的大文件傳輸
- 30. 下載文件用url捲曲var
扭曲不使用線程... – GaretJax