python - UNIX 命名的 PIPE 文件结尾

标签 python linux loops pipe eof

我正在尝试使用 unix 命名管道来输出正在运行的服务的统计信息。我打算提供一个与 /proc 类似的界面,人们可以在其中通过抓取文件来查看实时统计信息。

我在我的 python 代码中使用了与此类似的代码:

while True:
  f = open('/tmp/readstatshere', 'w')
  f.write('some interesting stats\n')
  f.close()

/tmp/readstatshere 是由mknod 创建的命名管道。

然后我 cat 它以查看统计信息:

$ cat /tmp/readstatshere
some interesting stats

大多数情况下它工作正常。但是,如果我快速连续多次 cat 条目,有时我会得到多行 some interesting stats 而不是一行。有一两次,它甚至进入了一个无限循环,永远打印那一行,直到我杀死它。到目前为止,我唯一的解决办法是在 f.close() 之后延迟 500 毫秒,以防止出现此问题。

我想知道为什么会发生这种情况,以及是否有更好的处理方法。

提前致谢

最佳答案

管道在这里只是错误的解决方案。如果您想呈现流程内部状态的一致快照,请将其写入临时 文件,然后将其重命名为“公共(public)”名称。这将防止在您更新状态时其他进程读取状态可能引起的所有问题。此外,不要在繁忙的循环中执行此操作,但最好在更新之间至少休眠一秒钟的线程中执行此操作。

关于python - UNIX 命名的 PIPE 文件结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7540460/

相关文章:

Python 通过子进程或其他方法加速命令行调用

python - 玩家应该继承还是拥有关卡?

Python 从多个文件写入会覆盖以前的内容

javascript - jQuery Loop by id 为每个元素

python - 在 PyCharm 控制台中打印长字典

python - 具有可变成员的列表列表的产品

linux - 尝试在 bash linux 中使用 "new line"命令复制语法

php - Kohana 2.3.4 + LINUX - ErrorException [ fatal error ] : Class not found

linux - 使用 imagemagick linux 脚本裁剪图像不起作用

递归遍历 child 森林的算法