我的问题如下:
我的 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 会说哦,你的脚本意外退出了。
如果我使用 while true 循环,我的脚本将使用 100% 的 CPU 使用率。
最佳答案
以下内容应该可以正常工作。
import sys
for line in sys.stdin:
# whatever
理由:
代码将在标准输入输入时遍历行。如果流仍然打开,但没有完整的行,则循环将挂起,直到遇到换行符(并返回整行)或者流被关闭(缓冲区中剩余的内容将被返回)。
一旦流被关闭,就不能再向标准输入写入数据或从标准输入读取数据。期间。
您的代码使您的 CPU 重载的原因是一旦标准输入被关闭,任何后续的迭代标准输入的尝试将立即返回而不做任何事情。本质上,您的代码等同于以下内容。
for line in sys.stdin:
# do something
while 1:
pass # infinite loop, very CPU intensive
如果您发布您是如何将数据写入标准输入的,也许它会很有用。
编辑:
Python 将(出于 for 循环、迭代器和 readlines() 的目的)在遇到 EOF 字符时考虑关闭流。您可以要求 python 在这之后读取更多数据,但您不能使用之前的任何方法。 python手册页推荐使用
import sys
while True:
line = sys.stdin.readline()
# do something with line
当遇到 EOF 字符时,readline 将返回一个空字符串。如果流仍然打开,对 readline 的下一次调用将正常运行。您可以通过在终端中运行命令来自行测试。按 ctrl+D 将导致终端将 EOF 字符写入标准输入。这将导致本文中的第一个程序终止,但最后一个程序将继续读取数据,直到流真正关闭。最后一个程序不应该 100% 使用您的 CPU,因为 readline 将等待直到有数据返回而不是返回空字符串。
当我尝试从实际文件读取行时,我只会遇到忙循环的问题。但是当从 stdin 读取时,readline 很乐意阻塞。
关于Python 等待数据进入 sys.stdin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7056306/
我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01 客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02 数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit