【发布时间】:2011-01-09 08:38:32
【问题描述】:
我有一个通过 os.mkfifo() 命令创建的命名管道。我有两个不同的 Python 进程访问这个命名管道,进程 A 正在读取,进程 B 正在写入。进程 A 使用 select 函数来确定 fifo/管道中何时有可用数据。尽管进程 B 在每次写入调用后都会刷新,但进程 A 的 select 函数并不总是返回(它会一直阻塞,就好像没有新数据一样)。在深入研究了这个问题之后,我最终只对进程 B 进行了编程,使其在我真正调用之前和之后添加 5KB 的垃圾写入,同样,进程 A 被编程为忽略这 5KB。现在一切正常,并且选择总是适当地返回。我注意到如果进程 B 被杀死,进程 A 的 select 将返回(在它写入和刷新之后,它将在读取管道上休眠),我来到了这个 hack-ish 解决方案。在 Python 中刷新命名管道是否有问题?
【问题讨论】:
-
您能否发布一些显示问题的最小测试代码。正如你描述的问题,大约十几行就足够了。
标签: python select ipc named-pipes flush