python多处理写入共享文件

ccd*_*ell 5 python multiprocessing file-writing python-2.7

在写入我通过将其传递给使用多处理实现的工作函数共享的打开文件时,文件内容未正确写入。相反 '^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ ^@^@^@^@^@^@^@^@^' 写入文件。

为什么会发生这种情况?您不能将多个多处理单元写入同一个文件吗?你需要使用锁吗?队列?我是否没有正确或有效地使用多处理?

我觉得一些示例代码可能会有所帮助,但请仅将其作为我打开文件并通过多处理将打开的文件传递给另一个对该文件进行写入的函数的参考。

多处理文件:

import multiprocessing as mp

class PrepWorker():
    def worker(self, open_file):
        for i in range(1,1000000):
            data = GetDataAboutI() # This function would be in a separate file
            open_file.write(data)
            open_file.flush()
        return

if __name__ == '__main__':
    open_file = open('/data/test.csv', 'w+')
    for i in range(4):
        p = mp.Process(target=PrepWorker().worker, args=(open_file,))
        jobs.append(p)
        p.start()

    for j in jobs:
        j.join()
        print '{0}.exitcode = {1}' .format(j.name, j.exitcode)   
    open_file.close()
Run Code Online (Sandbox Code Playgroud)

ser*_*inc 5

为什么会发生这种情况?

有几个进程可能会尝试调用

open_file.write(data)
open_file.flush()
Run Code Online (Sandbox Code Playgroud)

同时。在您看来,哪种行为适合

  • a.写
  • b.写
  • a.冲洗
  • c.写
  • b.冲洗

发生?

您不能将多个多处理单元写入同一个文件吗?你需要使用锁吗?队列?

Python multiprocessing 安全地写入文件建议有一个队列,即由写入文件的一个进程读取。在 python 中使用多处理处理来自多个进程的单个文件写入文件也是如此。

  • 谢谢你。这就是我所需要的。我试图对进程在刷新之间重叠写入的数据做太多处理。这个问题源于对如何构建多处理作业的根本误解。 (3认同)