Python - 获取多个网址

时间:2015-06-26 09:04:38

标签: python

我正在编写API端点,您可以认为它实际上是其他API的聚合器。您发送它某些参数,它的作用是将这些参数转换为底层API的参数并进行调用。理想情况下,我不希望以串行方式进行这些调用。

这样做的最佳方式是什么?

编辑:正如我所怀疑的那样,当您尝试做的事情是获取URL时,线程或进程不是可行的方法。这是因为大部分时间都花在等待网络回复上,所以你真正想要的是管理正在等待实际执行请求的任务的任务之间的变化。因此,我认为类似问题的答案实际上是错误的答案。

1 个答案:

答案 0 :(得分:0)

经过一些研究,据我所知,单线程异步代码比获取多个URL的特定情况的线程要好得多,尤其是对于许多URL的情况:

有Twisted,框架: http://twistedmatrix.com/documents/14.0.1/web/howto/client.html

和gevent,图书馆: http://sdiehl.github.io/gevent-tutorial/

来自http://mauveweb.co.uk/posts/2014/07/gevent-asynchronous-io-made-easy.html的简单示例,使用20的Pool进行100次调用:

from gevent import monkey
monkey.patch_all()

import urllib2
from gevent.pool import Pool


def download(url):
    return urllib2.urlopen(url).read()


if __name__ == '__main__':
    urls = ['http://httpbin.org/get'] * 100
    pool = Pool(20)
    print pool.map(download, urls)