python - 如何在读取时不写入文件,反之亦然

标签 python linux io parallel-processing

我有一个 python 程序(比如 reader.py),它使用文件 setting.py 来读取:

while( True ):
  ...
  execfile( settings.py )
  ...

但还有其他 python 程序(例如 writer.py)使用此文件写入:

...
try:
  settings = open('settings.py', 'w')
  settings.truncate()
  settings.write( 'some text')
except IOError:
  print('Cannot write to file')
finally:
  settings.close()
...

注意 1:reader.pywriter.py 不“了解”彼此。

注意2:reader.py循环读取settings.py,而writer.py在读取时写入文件用户想要(不一定是在他/她点击“写入”之后,它只是意味着没有任何规则何时写入)。

问题:为了避免任何矛盾,最好的合作两个程序的方法是什么?我知道这可能取决于平台。我正在使用 Linux。发行版有:Ubuntu、Scientific Linux。

EDIT1:如果我选择使用 FiFo,我会遇到以下问题:一旦 writer 写入了 settings 文件,它将可能永远不会再写了,但在这种情况下,读者应该可以访问 settings 。换句话说,读者应该有能力从文件中读取,而不是在这种情况下等待作者。否则读者必须等待作者。 FiFo 的普通使用不允许读取器在写入器不写入(直到它已写入)的情况下从文件中读取。如何处理这个问题?

最佳答案


您可能对使用命名管道进行进程间通信感兴趣。在 Linux 中可用,它是为客户端 (writer.py)、服务器 (reader.py)、任务设计的一种特殊类型的文件。写入管道后,客户端将等待服务器接收到数据。这允许您在某种程度上同步这两个进程。

Linux Manual for FiFo
Python doc: os.mkfifo(path[, mode])

关于python - 如何在读取时不写入文件,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44305510/

相关文章:

python - 如何在Python中打印+1,作为+1(带加号)而不是1?

python - 将 JSON 读入 pandas DataFrame 并添加/合并它们

c - 如何将变量传递给 C 中的 shell 命令?

java - 使用哪个文件读取写入 IO 类以及何时使用?

python - 在 Python 3 中导入

python - Seaborn factor plot hue 要求不为空 "cells"

linux - 计算/枚举按内容过滤的文件夹中的文件

c++ - 在 ARM 上安装 OpenCV 2.4.9

Java 控制台 readPassword() 返回无意义的字符

c# - 为什么 .NET 异步等待文件复制比同步 File.Copy() 调用消耗更多 CPU?