트위스트 된 (예를 들어) 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을 파이썬으로 번역 한 것입니다.
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()
Glyph의 QC : D Cheers!
관련 문제
- 1. 트위스트 conch 파일 전송
- 2. Python을 사용하여 파일 다운로드
- 3. AJAX를 사용하여 파일 다운로드
- 4. Perl을 사용하여 파일 다운로드
- 5. 코코아를 사용하여 파일 다운로드
- 6. httprequest를 사용하여 파일 다운로드
- 7. 파일을 사용하여 파일 다운로드
- 8. GZIP을 사용하여 파일 다운로드
- 9. HttpsURLConnection을 사용하여 xml.gz 파일 다운로드
- 10. .NET을 사용하여 원격 파일 다운로드
- 11. 생성 된 HTML 파일 다운로드
- 12. PHP와 cURL을 사용하여 파일 다운로드
- 13. 트위스트
- 14. UDP를 사용하여 파일 업로드/다운로드
- 15. CakePHP에서 미디어보기를 사용하여 파일 다운로드
- 16. 자바 스크립트를 사용하여 파일 다운로드
- 17. Wininet을 사용하여 이진 파일 다운로드
- 18. Python을 사용하여 백그라운드에서 파일 다운로드
- 19. PowerShell - WebDAV를 사용하여 파일 다운로드
- 20. Windows를 사용하여 파일 다운로드 IStream
- 21. MIDP 1.0을 사용하여 파일 다운로드
- 22. java를 사용하여 httpclient에서 파일 다운로드?
- 23. PhoneGap을 사용하여 URL에서 파일 시스템으로 파일 다운로드
- 24. tweenlite를 사용하여 3D 좌표 트위스트
- 25. 파일 다운로드
- 26. 순환 배열을 사용하여 큐를 구현했습니다.
- 27. VBA에서 진행률 측정기가 포함 된 파일 다운로드
- 28. 트위스트 플러그인과 트위스트 서비스의 차이점은 무엇입니까?
- 29. Internet Explorer 차단 된 다운로드 파일
- 30. WebDAV가 포함 된 Exchange에서 첨부 파일 다운로드
Twisted는 스레드를 사용하지 않습니다 ... – GaretJax