python多处理写入共享文件

时间:2015-12-29 07:21:36

标签: python python-2.7 multiprocessing file-writing

当写入我通过将其传递给使用多处理实现的辅助功能而共享的打开文件时,文件内容无法正确写入。相反'^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^ @ ^'被写入文件。

为什么会这样?你有没有很多多处理单元写入同一个文件?你需要使用锁吗?一个队列?我没有正确或有效地使用多处理吗?

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

多处理文件:

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()

1 个答案:

答案 0 :(得分:2)

  

为什么会发生这种情况?

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

open_file.write(data)
open_file.flush()

同时。如果像

这样的话,在你眼中哪种行为是合适的
  • a.write
  • b.write
  • a.flush
  • c.write
  • b.flush

会发生什么?

  

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

Python multiprocessing safely writing to a file建议使用一个队列,该队列由写入文件的一个进程读取。 Writing to a file with multiprocessingProcessing single file from multiple processes in python也是如此。