下载d的并行化循环

2024-04-30 00:37:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python还不熟悉。我想在googleappengine中运行一个简单的脚本,以尽可能快地将许多文件检索到一个对象中。并行化是一个明智的选择吗?我该怎么做呢?提前感谢大家的集思广益

import requests

...
theData=[]
for q in range(0, len(theURLs)):

    r = requests.get(theURLs[q])
    theData.insert(q,r.text)

Tags: 文件对象inimport脚本forgetlen
3条回答

您应该使用列表理解使代码更具python风格:

# A list of tuples
theData = [(q,requests.get(theURLs[q]).text) for q in range(0, len(theURLs))]

# ... or ...

# A list of lists
theData = [[q,requests.get(theURLs[q]).text] for q in range(0, len(theURLs))]

如果您想同时使用threading库检索文件,本网站提供了一些很好的示例,可能是一种很好的做法:

http://www.tutorialspoint.com/python/python_multithreading.htm

我真的很怀疑。并行化实际上只能加速计算,而这里的瓶颈是数据传输。你知道吗

在“常规”Python中,这非常简单。你知道吗

from multiprocessing.pool import ThreadPool
import requests
responses = ThreadPool(10).map(requests.get, urls)

将10替换为#个线程,以产生最佳结果。你知道吗

但是,您指定了对派生线程/进程有限制的GAE及其自己的异步方法,该方法包括使用URL Fetch service中的异步函数,如下所示(未测试):

rpcs = [urlfetch.create_rpc() for url in urls]
for (rpc, url) in zip(rpcs, urls):
    urlfetch.make_fetch_call(rpc, url)
results = [rpc.get_result() for rpc in rpcs]

您需要添加错误处理。。。你知道吗

相关问题 更多 >