我有一个进程正在从一个文件中读取(使用file.read()
),一个进程正在写入同一个文件(file.write()
)。问题是它不起作用 - 我没有错误,但它们无法同时运行。我已经尝试使读取和写入操作无阻塞,然后刷新流,如下所示:
fcntl.fcntl(file, fcntl.F_SETFL, os.O_NONBLOCK)
file.write(msg)
file.flush()
我完全误解了吗?如何从不同的流程中完成一个文件的写入和读取?
答案 0 :(得分:18)
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)
这对我来说很好。
答案 1 :(得分:8)
是否有理由使用通用文件?使用sockets可能会更容易进行进程间通信。
答案 2 :(得分:3)
看看这个读写锁类:
以及关于锁定和线程的文章:
答案 3 :(得分:1)
另一种很棒的方法是使用管道
This example实例化管道,该管道返回读取器和写入器对象。然后,一个进程使用编写器将其写入管道,另一个进程使用读取器从其进行读取。
Python os.pipe():https://docs.python.org/3/library/os.html#os.pipe