我的问题如下:
我的Python脚本通过sys.stdin接收数据,但它需要等待直到有新的数据可用于sys.stdin。
如Python的manpage中所述,我使用了以下代码,但它完全过载了我的CPU。
#!/usr/bin/python -u
import sys
while 1:
for line in sys.stdin.readlines():
do something useful
有没有好的方法来解决高CPU使用率?
编辑:
你们所有的解决方案都不起作用。我会给你们详细说明我的问题。
你可以配置apache2守护程序,让它将每个日志行发送到程序而不是写入日志文件中。
看起来大致是这样的:
CustomLog "|/usr/bin/python -u /usr/local/bin/client.py" combined
Apache2 期望我的脚本始终运行,等待 sys.stdin 上的数据并在有数据时解析它。
如果我只使用 for 循环,脚本会退出,因为在某个时候 sys.stdin 中没有数据,这时 Apache2 会说你的脚本意外退出。
如果我使用 while true 循环,我的脚本将使用 100% 的 CPU 使用率。
readline()
和readlines()
之间的区别。readlines()
将读取来自 stdin 的所有输入直到 EOF(基本上是调用read()
然后根据换行符进行分割)。这意味着当 stdin 关闭时,它将第一次返回。对 stdin 进行未来的 readlines() (或read()
和readline()
)调用将返回[]
(或""
),建议阅读: https://docs.python.org/2/tutorial/inputoutput.html https://unix.stackexchange.com/questions/103885/piping-data-to-a-processs-stdin-without-causing-eof-afterward - FluxLemur