我正在适应这个 Django 管理命令为了我自己的目的。该脚本是一个简单的 while 循环守护进程,它从 sys.stdin 读取(第 152 行,在command.handle()
) 根据协议并将结果写入 sys.stdout。
我希望sys.stdin.read()
阻塞直到它收到一些东西,但我发现当我运行这个脚本时,它会在发送或接收任何数据之前占用 100% 的 CPU。
- Does
sys.stdin.read(n)
block?
- 如果没有,我怎样才能让这个守护进程更有礼貌呢?
- Is
time.sleep(s)
使用安全,或者我会错过输入或响应缓慢吗?
默认情况下,sys.stdin.read()
and sys.stdin.read(n)
正在阻止呼叫。我假设 100% CPU 的消耗实际上是由于将数据流式传输到脚本中或此处未引用的其他一些行为造成的。
查看帮助文档后sys.stdin.read
,我注意到了这一点:
读(...)
read([size]) -> 最多读取 size 字节,以字符串形式返回。
如果大小参数为负数或被省略,则读取直到达到 EOF。请注意,当处于非阻塞模式时,数据少于请求的数据
即使没有给出尺寸参数,也可能会被返回。
(强调我的。)
这意味着阻塞模式是默认行为,这与我的经验一致。这也让我在 SO 上找到了类似的问题。瞧:python 中 subprocess.PIPE 的非阻塞读取
祝你适应顺利!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)