簡體   English   中英

python的sys.stdin.read()會阻塞嗎?

[英]Does python's sys.stdin.read() block?

我正在為我自己的目的調整這個Django管理命令 該腳本是一個簡單的while循環守護進程,它根據協議從sys.stdin(第152行,在command.handle() )讀取並將結果寫入sys.stdout。

我希望sys.stdin.read()能夠阻塞直到它收到一些東西,但我發現當我運行這個腳本時,它會在發送或接收任何數據之前吃掉100%的CPU。

  1. sys.stdin.read(n)阻塞了嗎?
  2. 如果沒有,我怎么能讓這個守護進程更禮貌?
  3. time.sleep(s)安全使用,或者我會錯過輸入或響應緩慢?

默認情況下, sys.stdin.read()sys.stdin.read(n)是阻塞調用。 我認為100%CPU的消耗實際上可歸因於流數據流入您的腳本或此處未引用的其他一些行為。

在查看sys.stdin.read的幫助文檔sys.stdin.read ,我注意到了這一點:

讀(...)

read([size]) - >讀取最多大小字節,作為字符串返回。

如果size參數為負數或省略,則讀取直到達到EOF。 請注意,在非阻塞模式下 ,即使沒有給出大小參數,也可能返回的數據少於請求的數據。

(強調我的。)

這意味着阻塞模式是默認行為,這與我的經驗一致。 它還讓我在SO上追查類似的問題。 Voila: python中 subprocess.PIPE上的非阻塞讀取

祝你好運!

它在我的機器上運行正常(即在讀取時CPU使用率過低的塊) - 您可以在之前通過簡單的命令行腳本進行檢查嗎? 另外,我在Linux中對此進行了測試,在其他平台上可能會有所不同。

流是否有可能已關閉(例如EOF已發送)?

暫無
暫無

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

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