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)
为什么会发生这种情况?
有几个进程可能会尝试调用
open_file.write(data)
open_file.flush()
Run Code Online (Sandbox Code Playgroud)
同时。在您看来,哪种行为适合
发生?
您不能将多个多处理单元写入同一个文件吗?你需要使用锁吗?队列?
Python multiprocessing 安全地写入文件建议有一个队列,即由写入文件的一个进程读取。在 python 中使用多处理和处理来自多个进程的单个文件写入文件也是如此。
归档时间: |
|
查看次数: |
7543 次 |
最近记录: |