我有通過os.mkfifo()命令創建的命名管道。我有兩個不同的Python進程訪問這個命名管道,進程A正在讀取,進程B正在寫入。進程A使用select函數來確定fifo/pipe中何時有數據可用。儘管在每次寫入調用之後進程B都會刷新,但進程A的select函數並不總是返回(它保持阻塞,就好像沒有新數據一樣)。在深入研究這個問題之後,我最終編寫了程序B,在真正的調用之前和之後添加了5KB的垃圾寫入,同樣,程序A被編程爲忽略這5KB。現在一切正常,選擇總是適當地返回。我注意到如果進程B被殺死(在它正在寫入和刷新之後,它將睡在讀取管道上),那麼進程A的選擇將返回,從而達到了這種黑客解決方案。在Python中爲命名管道刷新有問題嗎?命名管道不在Python中刷新
4
A
回答
0
刷新操作與命名管道無關;命名管道的數據嚴格保存在內存中,並且在讀取或FIFO關閉之前不會被釋放。
+3
如果輸出到管道的數據在應用程序級別進行緩衝,則刷新操作仍然可能是相關的。 – 2010-01-26 02:09:15
+0
我猜測應用程序級別有緩衝區,有人知道任何錯誤嗎? – BrainCore 2010-01-26 03:10:32
1
您使用的是什麼API? os.read()
和os.write()
不會緩衝任何內容。
1
要了解Python的內部緩衝是否會導致您的問題,請在運行腳本時使用「python -u」而不是「python」。這將強制python進入「無緩衝模式」,這將導致所有輸出即時打印。
相關問題
- 1. python命名管道問題
- 2. OpenCV的Python中,從命名管道
- 3. Python保持命名管道開放
- 4. NSIS中的命名管道
- 5. unix中的命名管道
- 6. rpmbuild中的命名管道
- 7. java中的命名管道
- 8. Windows 7中命名管道
- 9. 命名管道在c
- 10. 命名管道掛在讀
- 11. 在Windows上命名管道
- 12. 命名管道IPC
- 13. 從命名管道
- 14. 命名管道Matlab
- 15. 管道ffmpeg輸出到命名管道
- 16. Angular 2異步管道不刷新
- 17. 在實踐中Windows命名管道
- 18. 在C++和php中命名管道
- 19. 在ASP.NET中使用「命名管道」HttpModule
- 20. 在Rails中使用命名管道
- 21. 在Java中創建命名管道
- 22. 在Windows中枚舉命名管道
- 23. 在C中使用管道的命名管道塊子進程
- 24. 在bash中命名管道比普通管道更快嗎?
- 25. WCF命名管道在WinApp中超時,但不在ConsoleApp中?
- 26. 如何寫入命名管道,不要等待讀取管道
- 27. 不能創建命名管道
- 28. 讀不阻塞命名管道
- 29. 命名管道問題
- 30. IPC安全命名管道
你能否發佈一些顯示問題的最小測試代碼。正如你所描述的,有關十幾行的問題應該足夠了。 – kriss 2010-03-25 15:24:12