gpt4 book ai didi

python - 如何根据 Python 中输入列表的索引附加多处理池的结果?

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:00 25 4
gpt4 key购买 nike

总的来说,我的脚本正在接受以下输入:

  1. 地址搜索查询
  2. 纬度/经度坐标

我需要做的是调用地理编码 API 以获取查询列表中每个地址的响应,解析 XML 响应以获取我需要的信息,并检查新返回的点是否与文件中的点匹配。

在我尝试使用 Python 中的多处理函数来帮助加速任务之前,我的设置工作正常。

当使用多处理时,我可以获得最终结果,但出现的问题是处理的随机顺序,我收到的多处理结果与正确的输入查询不匹配。

例如“123 Main Street”结果附加到“431 Main Street”,“431 Main Street”结果附加到“123 Main Street”

我的问题是:如何让多处理结果附加到正确的查询而不是根据处理顺序附加?

我正在使用 Pandas Data Frame 来跟踪数据。

部分相关:

    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

编辑:链接线程非常相似,但不完全是我需要的。我从下面的评论中发现,多处理列表确实按输入列表的顺序而不是处理顺序返回。有了这些信息,我意识到我只需要引用响应的索引。我使用附加线程中的枚举函数完成了此操作,因此很有帮助。

另一个不相关的问题.. 多处理似乎无法正常工作。花费的时间是之前的两倍。解决一个问题,又会出现另一个问题!

感谢您的帮助!

最佳答案

pool.map 的结果以匹配输入数据的顺序返回。考虑以下示例。

from multiprocessing import Pool
import time, random

def f(x):
t = random.random() # sleep for a random time to mix up the results
time.sleep(t)
print(x)
return (t, str(x))

if __name__ == '__main__':
p = Pool(3) # 3 worker threads
data = range(10)
print(p.map(f, data))

结果是:

1
2
4
5
0
3
7
6
8
9
[(0.8381880180345248, '0'), (0.3361198414214449, '1'), (0.48073509426290906, '2'), (0.5767279178958461, '3'), (0.14369537417791844, '4'), (0.1914456539782432, '5'), (0.7090097213160568, '6'), (0.624456052752851, '7'), (0.79705548172654, '8'), (0.9956179715628799, '9')]

请注意,即使由于随机延迟导致结果计算顺序不正确,结果列表的顺序也是正确的。

我怀疑问题出在您处理结果的方式上。

#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

您已经在遍历结果,那么为什么要用递增的数字对结果进行索引?

相反,听起来您应该从 queryList 中引用匹配的输入数据,例如:

for query, result in zip(queryList, results):
# this is probably not quite right, but basically do something
# with query and result
df.loc[query,'Result Text'] = result

关于python - 如何根据 Python 中输入列表的索引附加多处理池的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42988565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com