簡體   English   中英

命名管道未在Python中刷新

[英]Named pipe is not flushing in Python

我有一個通過os.mkfifo()命令創建的命名管道。 我有兩個不同的Python進程正在訪問此命名管道,進程A正在讀取,進程B正在寫入。 進程A使用選擇功能來確定fifo /管道中是否有可用數據。 盡管事實上在每次寫調用之后進程B都會刷新,但是進程A的select函數並不總是返回(就像沒有新數據一樣,它總是阻塞)。 在廣泛研究了這個問題之后,我終於對程序B進行了編程,以在我的實際調用之前和之后添加5KB的垃圾寫入,同樣,程序A也被編程為忽略那些5KB。 現在一切正常,並且select總是正確返回。 我通過注意到進程A的選擇將在進程B被殺死時返回(在進行寫入和刷新之后,將在讀取管道上休眠)來獲得這種黑客般的解決方案。 Python中的命名管道沖洗是否存在問題?

您正在使用哪些API? os.read()os.write()不緩沖任何內容。

要了解Python的內部緩沖是否引起了您的問題,請在運行腳本時執行“ python -u”而不是“ python”。 這將強制python進入“非緩沖模式”,這將導致所有輸出立即打印。

沖洗操作與命名管道無關。 命名管道的數據嚴格保留在內存中,直到被讀取或關閉FIFO才會釋放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM