我有一个进程正在读取文件(使用file.read()
),还有一个进程正在写入相同的文件(file.write()
)。问题是它们不能同时操作,我没有收到任何错误提示。我尝试了将读取和写入操作设置为非阻塞,然后将流刷新,如下:
fcntl.fcntl(file, fcntl.F_SETFL, os.O_NONBLOCK)
file.write(msg)
file.flush()
我是否完全误解了它?如何在不同进程中实现对同一文件的写入和读取?
test1.py
import os
f = open('txt.txt', 'a', os.O_NONBLOCK)
while 1:
f.write('asd')
f.flush()
test2.py
import os
f = open('txt.txt', 'r', os.O_NONBLOCK)
while 1:
print f.read(3)
这对我来说运行良好。
是否有使用公共文件的原因?使用socket可能更容易进行进程间通信。
另一种很好的方法是使用管道
这个示例 实例化了一个管道,它返回一个读取器和一个写入器对象。然后一个进程使用写入器向管道写入数据,另一个进程使用读取器从管道中读取数据。
Python os.pipe():https://docs.python.org/3/library/os.html#os.pipe