【发布时间】:2017-03-23 23:04:33
【问题描述】:
总的来说,我的脚本正在输入:
- 地址查询查询
- 纬度/经度坐标
我需要做的是调用地理编码 API 来获取查询列表中每个地址的响应,解析 XML 响应以获取我需要的信息,并检查新返回的点是否与文件中的点匹配。
在我尝试使用 Python 中的多处理功能来帮助加快任务之前,我的设置工作正常。
使用多处理时,我可以获得最终结果,但出现的问题是处理的随机顺序,我收到的多处理结果与正确的输入查询不匹配。
例如“123 Main Street”结果附加到“431 Main Street”,“431 Main Street”结果附加到“123 Main Street”
我的问题是: 如何让多处理结果追加到正确的查询,而不是根据处理顺序追加?
我正在使用 Pandas 数据框来跟踪数据。
部分相关:
def apiRequest(query):
url = 'URL goes here'
parameters = {'q':query,'other parameters are here'}
request = requests.get(url,params=parameters)
result = ET.fromstring(request.text)
return(result)
results = pool.map(apiRequest,queryList)
#This is where I append the result where order is based on multiprocessing result list
i=0
for result in results:
df.loc[result[i],'Result Text'] = result
i=i+1
编辑:链接线程非常相似,但不完全是我需要的。我从下面的评论中发现,多处理列表确实按输入列表的顺序返回,而不是按处理顺序返回。有了这些信息,我意识到我只需要参考响应的索引。我使用附加线程中的 enumerate 函数做到了这一点,所以它很有帮助。
另一个不相关的问题现在.. 似乎多处理不起作用。花费的时间是以前的两倍。解决一个问题,另一个问题出现了!
感谢您的帮助!
【问题讨论】:
-
关于您的性能问题,我建议收集一些数据(使用每种方法的时间)并作为新问题发布。尝试包含一个最小、完整和可验证的示例stackoverflow.com/help/mcve
标签: python pandas indexing multiprocessing geocoding