python的sys.stdin.read()会阻塞吗?

Dav*_*Eyk 6 python django stdin

我正在为我自己的目的调整这个Django管理命令.该脚本是一个简单的while循环守护进程,它command.handle()根据协议从sys.stdin(第152行)读取并将结果写入sys.stdout.

我希望sys.stdin.read()阻止它收到的东西,但我发现当我运行这个脚本时,它会在发送或接收任何数据之前吃掉100%的CPU.

  1. sys.stdin.read(n)阻止?
  2. 如果没有,我怎么能让这个守护进程更礼貌?
  3. 是否time.sleep(s)使用安全,或者我会想念输入或者是反应慢了?

MrG*_*mez 2

默认情况下,sys.stdin.read()sys.stdin.read(n)正在阻止调用。我假设 100% CPU 的消耗实际上是由于将数据流式传输到脚本中或此处未引用的其他一些行为造成的。

在查看 的帮助文档后sys.stdin.read,我注意到了这一点:

读(...)

read([size]) -> 最多读取 size 字节,以字符串形式返回。

如果大小参数为负数或被省略,则读取直到达到 EOF。 请注意,在非阻塞模式下,即使没有给出大小参数,返回的数据也可能少于请求的数据。

(强调我的。)

这意味着阻塞模式是默认行为,这与我的经验一致。这也让我在 SO 上找到了类似的问题。瞧: 在 python 中对 subprocess.PIPE 进行非阻塞读取

祝你适应顺利!