Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用于下载数据的并行化循环_Python - Fatal编程技术网

Python 用于下载数据的并行化循环

Python 用于下载数据的并行化循环,python,Python,我是Python新手。我想在GoogleAppEngine中运行一个简单的脚本,它可以尽快将许多文件检索到一个对象中。并行化会是一个明智的选择吗?我该如何做呢?提前感谢您的头脑风暴 import requests ... theData=[] for q in range(0, len(theURLs)): r = requests.get(theURLs[q]) theData.insert(q,r.text) 您应该通过使用列表理解使代码更具python风格: # A

我是Python新手。我想在GoogleAppEngine中运行一个简单的脚本,它可以尽快将许多文件检索到一个对象中。并行化会是一个明智的选择吗?我该如何做呢?提前感谢您的头脑风暴

import requests

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

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

您应该通过使用列表理解使代码更具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))]
如果您想同时使用
线程
库检索文件,本网站提供了一些很好的示例,可能是一种很好的做法:


我对此表示严重怀疑。并行化实际上只能加快计算速度,而这里的瓶颈是数据传输。

在“常规”Python中,这非常简单

from multiprocessing.pool import ThreadPool
import requests
responses = ThreadPool(10).map(requests.get, urls)
将10替换为能为您产生最佳结果的#个线程

但是,您指定了GAE,该GAE对生成线程/进程及其自身的异步方法有限制,该方法包括使用来自的异步函数,具体如下(未测试):


您需要添加错误处理…

整个过程只需一行,这就是优雅!它是否可以不使用q作为第一个参数,比如:
theData=[q,requests.get(theURLs[q])。q的文本范围(0,len(theURLs))]
?否则我会出错哦,对不起,我错过了右括号(对于元组)或方括号(对于列表),请参见编辑,现在应该可以了。这取决于你想对数据做什么,元组是不可变的,列表不是。我强烈建议你在这个网页上学习Python,并快速编写Python代码,前提是你之前对其他语言有一定的了解(有很多关于元组和列表的好信息,等等):在不需要列表索引的地方避免使用列表索引也更具python风格,例如,
[(url,requests.get(url.text)for url in url]
@JasonS是的,这是一个很好的观点,但是我认为他想使用整数索引作为元组或列表的第一对,这就是为什么我保持基于范围的for循环。
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]