在我的程序中,我需要同時下載3-4個文件(來自不同的服務器,這些服務器很慢)。我意識到涉及python線程或qt線程的解決方案,但我想知道:因爲它似乎是一個相當普遍的任務,也許有一個庫,我提供的URL和簡單地接收文件? 在此先感謝!在python和qt下同時下載文件
2
A
回答
3
你並不需要一個庫;這是一個簡單的線程使用(當然,因爲線程可以是'簡單的')。見例如http://www.artfulcode.net/articles/multi-threading-python/爲一個整潔的教程。
7
是的,有一個 - pycurl。
它不是'簡單'的,因爲curl是低級的,但它完全符合你的需求 - 你爲它提供一些URL,然後它同時並且異步地下載。
import pycurl
from StringIO import StringIO
def LoadMulti(urls):
m = pycurl.CurlMulti()
handles = {}
for url in urls:
c = pycurl.Curl()
c.setopt(pycurl.URL, url)
data = StringIO()
header = StringIO()
c.setopt(pycurl.WRITEFUNCTION, data.write)
c.setopt(pycurl.HEADERFUNCTION, header.write)
handles[url] = dict(data=data, header=header, handle=c)
m.add_handle(c)
while 1:
ret, num_handles = m.perform()
if ret != pycurl.E_CALL_MULTI_PERFORM: break
while num_handles:
ret = m.select(1.0)
if ret == -1: continue
while 1:
ret, num_handles = m.perform()
if ret != pycurl.E_CALL_MULTI_PERFORM: break
return handles
res = LoadMulti(['http://pycurl.sourceforge.net/doc/pycurl.html', 'http://pycurl.sourceforge.net/doc/curlobject.html', 'http://pycurl.sourceforge.net/doc/curlmultiobject.html'])
for url, d in res.iteritems():
print url, d['handle'].getinfo(pycurl.HTTP_CODE), len(d['data'].getvalue()), len(d['header'].getvalue())
您可以在這些while循環中運行GUI更新,因此接口不會凍結。
相關問題
- 1. 同步的C++/Qt下載文件
- 2. SFTP文件同時上傳和下載
- 3. Qt和HTTP下載
- 4. Python下載文件
- 5. Python文件下載
- 6. 下載和下載管理器在Qt文檔中的例子
- 7. Python restplus API上傳和下載文件
- 8. Python下載文件和圖像
- 9. JAVA:同時下載多個文件?
- 10. 空的空間,同時下載文件
- 11. 同時下載Android中的文件
- 12. Node.JS同時下載數百個文件
- 13. 獲取文件名,同時下載它
- 14. 下載文件Qt中從URL
- 15. 下載QT中的很多文件
- 16. 使用python下載文件
- 17. 使用Python下載文件
- 18. Python - 文件不會下載
- 19. 從URL下載Python文件
- 20. 使用Python下載文件
- 21. Python硒的下載文件
- 22. 從Python 3下載文件
- 23. 估計下載和上傳文件的時間(在python中)
- 24. 在下載短文件時阻止Qt應用程序
- 25. Curl同時下載和上傳相同的文件
- 26. 下載從鏈接Excel文件在python
- 27. 如何在python下載pdf文件?
- 28. 在GAE中下載/列出文件Python
- 29. 如何在Odooo Python中下載文件?
- 30. 在Groovy/Java下載文件下載
真棒答案,謝謝! – Tom 2010-08-23 11:41:13