Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—写入单个结果文件时的多处理_Python_Multiprocessing - Fatal编程技术网

Python—写入单个结果文件时的多处理

Python—写入单个结果文件时的多处理,python,multiprocessing,Python,Multiprocessing,我对多处理软件包真的很陌生,我没能完成任务 我有很多东西要计算 我需要记录的结果也保存在这些对象中 结果应该在流程完成计算后立即写入一个文件中(我的方法至少是让它工作,直到所有计算完成为止) 如何将计算结果同时写入一个文件,而不必等待所有过程完成?您可以使用 使用Python 3.3+更好 def mp_handler(data_list): with multiprocessing.Pool(4) as p: with open('results.csv', 'a')

我对多处理软件包真的很陌生,我没能完成任务

我有很多东西要计算

我需要记录的结果也保存在这些对象中

结果应该在流程完成计算后立即写入一个文件中(我的方法至少是让它工作,直到所有计算完成为止)

如何将计算结果同时写入一个文件,而不必等待所有过程完成?

您可以使用

使用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))
你可以用

使用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))