首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python和qt中同时下载文件

在python和qt中同时下载文件
EN

Stack Overflow用户
提问于 2010-08-23 18:07:11
回答 2查看 1.7K关注 0票数 2

在我的程序中,我需要同时下载3-4个文件(从不同的服务器,这是相当慢)。我知道涉及python线程或qt线程的解决方案,但我想知道:既然这似乎是一个很常见的任务,也许有一个库,我提供urls并简单地接收文件?提前感谢!

EN

回答 2

Stack Overflow用户

发布于 2010-08-23 18:55:10

是的,有一个- pycurl。

它不是“简单的”,因为curl是低级的,但它做的正是你需要的--你给它提供一些curl,然后它就会同时和异步地下载。

代码语言:javascript
运行
复制
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更新,这样界面就不会冻结。

票数 7
EN

Stack Overflow用户

发布于 2010-08-23 18:08:57

你并不真的需要一个库;这只是线程的简单使用(好吧,因为线程可以是“简单的”)。例如,请参阅http://www.artfulcode.net/articles/multi-threading-python/获取整洁的教程。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3546534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档