gpt4 book ai didi

python - 使用多重处理处理长列表

转载 作者:行者123 更新时间:2023-12-01 04:48:58 24 4
gpt4 key购买 nike

output = mp.Queue()

def endScoreList(all_docs, query, pc, output):
score_list = []
for doc in all_docs:
print "In process", pc
score_list.append(some_score(doc, query))
print "size of score_list is", len(score_list)
output.put((doc, score_list))

if __name__ == '__main__':
mp.freeze_support()
num_of_workers = mp.cpu_count()
doc_list = getDocuments(query)
## query is a list of strings.
## doc_list is a list of document names
processes = [mp.Process(target = endScoreList, args = (doc_list, x, query, output)) for x in range(num_of_workers)]
for p in processes:
p.start()
for p in processes:
p.join()
results = [output.get() for p in processes]
print results

我有一个文档名称列表 all_docs,我必须将其数据与输入查询进行比较。这是使用我从 some_score(doc, query) 获得的分数来完成的。文档列表约为 100k。我必须得到所有文件的分数。我怎样才能编写一个程序以便并行生成分数。这些分数是相互独立的,所以最后我只需合并所有返回的 (doc, Score) 列表即可。我尝试编写一个程序,但我认为它不是并行运行的。

请帮帮我。

我使用的是 Windows 64 位/i7。

最佳答案

很难指出当前代码出了什么问题,因为您显示的示例存在许多问题(例如,您使用 // 来引入注释,创建调用 finalScore 函数并传递 doc_list 作为参数的进程,两者均未定义)。

我不想尝试弄清楚代码发生了什么,而是想建议一种可能更简单的替代解决方案。如果您使用 multiprocessing.Poolmap 方法,您的工作将分布在池中的进程数量上。

import multiprocessing as mp

def worker(doc):
return doc, some_score(doc, "query")

if __name__ == "__main__":
mp.freeze_support()
p = mp.Pool() # default is a number of processes equal to the number of CPU cores
scores = p.map(worker, all_docs)
p.close()
p.join()

这个简单版本假设查询字符串是一个常量。如果情况并非如此,您可以将其作为 map 调用中的参数传递(或考虑使用 starmap 代替)。

关于python - 使用多重处理处理长列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28798711/

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