gpt4 book ai didi

python - python 的 sys.stdin.read() 是否阻塞?

转载 作者:太空狗 更新时间:2023-10-30 00:12:09 24 4
gpt4 key购买 nike

我正在改编 this Django management command为了我自己的目的。该脚本是一个简单的 while-loop 守护进程,根据 a protocol 从 sys.stdin(command.handle() 中的第 152 行)读取数据并将结果写入 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 的帮助文档时,我注意到了这一点:

read(...)

read([size]) -> read at most size bytes, returned as a string.

If the size argument is negative or omitted, read until EOF is reached. Notice that when in non-blocking mode, less data than what was requested may be returned, even if no size parameter was given.

(强调我的。)

这意味着阻塞模式是默认行为,这与我的经验一致。这也让我找到了关于 SO 的类似问题。瞧: Non-blocking read on a subprocess.PIPE in python

祝你适应顺利!

关于python - python 的 sys.stdin.read() 是否阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com