我已经使用了多处理模块并创建了一个进程,我要在其中访问文件并需要在其中写入一些日志。 我有特定的依赖性,这就是为什么我在工作函数之外声明了文件,并且从工作函数中我可以打印和访问文件对象,但是无法向其写任何内容。
能否请您提出我该如何写入该文件的建议。
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>
答案 0 :(得分:0)
将一些数据放入文件后,您需要关闭文件。做:
file1.write("hello 123")
file1.close()
答案 1 :(得分:0)
最佳做法是使用#pixelCanvas
打开文件,这将在您处理完文件后显式关闭文件;
with
答案 2 :(得分:0)
目前尚不清楚您到底要达到什么目标。 根据您的代码,file1将是一个FileStream对象。您正在流程的多个地址空间中共享此单个流。那是第一个缺陷。
当您的函数尝试执行多处理函数时,不会共享文件流。此外,对file1 FileStream的引用不会被破坏,因此您可以访问文件但不能写入文件。 另外,为什么要以“ w +”模式打开?您有任何明确的理由来截断文件吗?
要解决此问题,您应该在执行产生程序的函数中打开文件流:
def worker():
print "iam called"
with open(files.txt",'w+'):
file1.write("hello 123")