【发布时间】:2015-03-01 20:32:52
【问题描述】:
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,我必须将其数据与输入query 进行比较。这是使用我从some_score(doc, query) 获得的分数来完成的。文档列表约为 100k。我必须得到所有文件的分数。如何制作程序以并行生成分数。分数是相互独立的,所以最后我只需要合并所有返回的(doc, score) 列表。我试着做一个程序,但我不认为它是并行运行的。
请帮帮我。
我使用的是 Windows 64 位/i7。
【问题讨论】:
-
是什么让您认为您的进程没有并行运行?
-
虽然您显示的代码非常接近工作,但使用
multiprocessing.Pool及其map方法之一(map、imap、@ 987654330@等)。 -
@SeanPedersen 实际上很慢。我在函数中打印了列表的大小,它的工作方式与没有
multithreading时的工作方式相同。 -
@Blckknght 我也会试试的。
标签: python python-2.7 multiprocessing