Python—写入单个结果文件时的多处理
我对多处理软件包真的很陌生,我没能完成任务 我有很多东西要计算 我需要记录的结果也保存在这些对象中 结果应该在流程完成计算后立即写入一个文件中(我的方法至少是让它工作,直到所有计算完成为止) 如何将计算结果同时写入一个文件,而不必等待所有过程完成?您可以使用 使用Python 3.3+更好Python—写入单个结果文件时的多处理,python,multiprocessing,Python,Multiprocessing,我对多处理软件包真的很陌生,我没能完成任务 我有很多东西要计算 我需要记录的结果也保存在这些对象中 结果应该在流程完成计算后立即写入一个文件中(我的方法至少是让它工作,直到所有计算完成为止) 如何将计算结果同时写入一个文件,而不必等待所有过程完成?您可以使用 使用Python 3.3+更好 def mp_handler(data_list): with multiprocessing.Pool(4) as p: with open('results.csv', 'a')
def mp_handler(data_list):
with multiprocessing.Pool(4) as p:
with open('results.csv', 'a') as f:
writer= csv.writer(f, lineterminator = '\n', delimiter=";")
for result in p.imap_unordered(mp_worker, data_list):
print("Writing result for ",result.name)
writer.writerow((result.name, result.val))
你可以用
使用Python 3.3+更好
def mp_handler(data_list):
with multiprocessing.Pool(4) as p:
with open('results.csv', 'a') as f:
writer= csv.writer(f, lineterminator = '\n', delimiter=";")
for result in p.imap_unordered(mp_worker, data_list):
print("Writing result for ",result.name)
writer.writerow((result.name, result.val))
这真是一个故事。还有什么问题吗?对不起,我把它改成了一个问题:)结果的顺序重要吗?顺序不重要这是一个相当有趣的故事。还有什么问题吗?对不起,我把它改成了一个问题:)结果的顺序重要吗?顺序不重要只是一个旁注问题:在这个构造中,我如何捕获键盘中断异常?我尝试包装一个try:except:around'with open..,但它仍然为工人输出整个异常。对不起,我不知道-除了您尝试过的显而易见的解决方案之外。一个很好的策略是用使用线程的
multiprocessing.dummy
替换multiprocessing.dummy
,以确定多个进程是否导致意外行为。有时(特别是在Windows上),您甚至可以在多处理方面获得更好的性能。dummy
只是一个旁注问题:在这个构造中,如何捕获键盘中断异常?我尝试包装一个try:except:around'with open..,但它仍然为工人输出整个异常。对不起,我不知道-除了您尝试过的显而易见的解决方案之外。一个很好的策略是用使用线程的multiprocessing.dummy
替换multiprocessing.dummy
,以确定多个进程是否导致意外行为。有时(特别是在Windows上),您甚至可以通过多处理来获得更好的性能。dummy
def mp_handler(data_list):
with multiprocessing.Pool(4) as p:
with open('results.csv', 'a') as f:
writer= csv.writer(f, lineterminator = '\n', delimiter=";")
for result in p.imap_unordered(mp_worker, data_list):
print("Writing result for ",result.name)
writer.writerow((result.name, result.val))