Python 无法从进程写入文件,但能够使用多处理模块访问文件对象

Python 无法从进程写入文件,但能够使用多处理模块访问文件对象,python,python-multiprocessing,Python,Python Multiprocessing,我使用了多处理模块并创建了一个进程,在这个进程中,我想要访问一个文件,并且需要在其中写入一些日志。 我有特定的依赖关系,这就是为什么我在worker函数外声明file,从worked函数我可以打印和访问file对象,但不能向其写入任何内容 你能建议我怎么写那个文件吗 import multiprocessing import time file1 = open("files.txt",'w+') def worker(): print "iam called" print f

我使用了多处理模块并创建了一个进程,在这个进程中,我想要访问一个文件,并且需要在其中写入一些日志。 我有特定的依赖关系,这就是为什么我在worker函数外声明file,从worked函数我可以打印和访问file对象,但不能向其写入任何内容

你能建议我怎么写那个文件吗

import multiprocessing
import time

file1 = open("files.txt",'w+')

def worker():
    print "iam called"
    print file1
    file1.write("hello 123")


jobs = []
p = multiprocessing.Process(target=worker)
jobs.append(p)
p.start()
time.sleep(10)
p.terminate()
输出:

iam called
<open file 'files.txt', mode 'w+' at 0x7f5ee8bd7f60>
iam已调用

一旦将一些数据放入文件中,您需要关闭该文件。做:

file1.write("hello 123")
file1.close()

最佳做法是使用
with
打开文件,这将在您处理完文件后显式关闭文件

with open('files.txt', 'w+') as file1:
    #Perform actions here

现在还不清楚你到底想在这里实现什么。 根据您的代码,file1将是一个FileStream对象。您正在进程的多个地址空间中共享此单一流。这是第一个缺陷

当函数尝试执行多处理函数时,文件流不会共享。此外,对file1 FileStream的引用不会被破坏,因此您可以访问该文件,但不能写入该文件。 另外,为什么要以“w+”模式打开?您是否有明确的理由截断该文件

要解决此问题,应在执行衍生进程的函数中打开文件流:

def worker():
    print "iam called"
    with open(files.txt",'w+'):
        file1.write("hello 123")