我是Python的新手。我想在Google App Engine中运行一个简单的脚本,尽可能快地将许多文件检索到对象中。并行化是一个明智的选择,我将如何去做?提前感谢您的头脑风暴
import requests
...
theData=[]
for q in range(0, len(theURLs)):
r = requests.get(theURLs[q])
theData.insert(q,r.text)
答案 0 :(得分:3)
您应该使用列表推导使代码更加Pythonic:
# 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
答案 1 :(得分:3)
在“常规”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]
您需要添加错误处理...
答案 2 :(得分:-1)
我严重怀疑它。并行化实际上只能加速计算,而这里的瓶颈就是数据传输。