【发布时间】:2011-10-26 17:52:48
【问题描述】:
我的问题如下:
我的 pythons 脚本通过 sys.stdin 接收数据,但它需要等到 sys.stdin 上有新数据。
如 python 手册中所述,我使用以下代码,但它完全超载了我的 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 会说 ohh 你的脚本意外退出。
如果我使用 while true 循环,我的脚本将使用 100% 的 cpu 使用率。
【问题讨论】:
-
听起来你的问题出在其他地方。在 python 脚本中,stdin 中是否有数据并不重要,只要它是打开的即可。写入 python 脚本的任何内容都会过早关闭流。
-
首先,您应该了解
readline()和readlines()之间的区别。readlines()将从标准输入读取所有输入,直到 EOF(基本上调用read()然后用换行符分割)。这意味着它将在标准输入关闭时第一次返回。未来在标准输入上对readlines()(或read()和readline())的调用将返回[](或""用于读取/读取行)。推荐阅读:docs.python.org/2/tutorial/inputoutput.htmlunix.stackexchange.com/questions/103885/…