两个进程同时读写同一个文件Python

23

我有一个进程正在读取文件(使用file.read()),还有一个进程正在写入相同的文件(file.write())。问题是它们不能同时操作,我没有收到任何错误提示。我尝试了将读取和写入操作设置为非阻塞,然后将流刷新,如下:

fcntl.fcntl(file, fcntl.F_SETFL, os.O_NONBLOCK)
file.write(msg)
file.flush()

我是否完全误解了它?如何在不同进程中实现对同一文件的写入和读取?

4个回答

22

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)

这对我来说运行良好。


5
请注意,Windows 系统不支持 os.O_NONBLOCK。 - yoyo

10

是否有使用公共文件的原因?使用socket可能更容易进行进程间通信。


2
你说得没错。我最初也考虑过这种方法,但后来改变了主意,选择了文件 I/O。一旦我遇到了问题并开始解决它,我就有点想要解决它了 :P。还是谢谢你的回答。 - Andreas

3

1

另一种很好的方法是使用管道

这个示例 实例化了一个管道,它返回一个读取器和一个写入器对象。然后一个进程使用写入器向管道写入数据,另一个进程使用读取器从管道中读取数据。

Python os.pipe():https://docs.python.org/3/library/os.html#os.pipe


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接