【发布时间】:2018-03-18 11:08:46
【问题描述】:
我正在做很多计算,将结果写入文件。使用多处理我正在尝试并行计算。
这里的问题是我正在写入一个所有工作人员也在写入的输出文件。我对多处理很陌生,想知道如何使它工作。
代码的一个非常简单的概念如下:
from multiprocessing import Pool
fout_=open('test'+'.txt','w')
def f(x):
fout_.write(str(x) + "\n")
if __name__ == '__main__':
p = Pool(5)
p.map(f, [1, 2, 3])
我想要的结果是一个文件:
1 2 3
但是现在我得到一个空文件。有什么建议么? 我非常感谢任何帮助:)!
【问题讨论】:
-
要么在访问文件时需要加锁,要么为每个工作人员使用一个文件,稍后依次汇总
-
嗨,我已经尝试了您的代码,没有进行任何修改,我得到了一个文件
test.txt,其中写入了1, 2, 3。我无法重现您的错误 -
我正在使用 Python 3.6,如果这很重要的话
-
nj2237,很奇怪。我在 python 2.7 和 3.6 中都有问题(只有一个空文件)。
-
带有 'w' 标志的每个工作人员都会覆盖文件...尝试将其更改为 'a' 标志。此外,您要么需要让每个工作人员写入唯一文件并稍后将它们组合起来,要么需要多进程计算然后写入单个文件。第三种选择是写入一些具有并发访问权限的数据库。
标签: python python-2.7 multiprocessing pool