在这种情况下,说我想等待条件发生,这可能发生在任何随机时间。
while True:
if condition:
#Do Whatever
else:
pass
如您所见,传递将在条件为True之前发生。但是当条件不是真时,cpu被挂起通过导致更高的CPU使用率,当我只是想让它等到条件发生时。我怎么能这样做?
答案 0 :(得分:2)
请参阅Busy_loop#Busy-waiting_alternatives:
大多数操作系统和线程库提供各种系统调用,可阻止事件处理,例如锁定获取,定时器更改,I / O可用性或信号。
基本上,等待某事,你有两个选择(与IRL相同):
答案 1 :(得分:2)
正如已经提到的,你可以a)轮询,即检查条件,如果不是真的等待一段时间间隔,如果你的条件是外部事件,你可以安排阻塞等待状态改变,或者你还可以查看发布订阅模型pubsub,其中您的代码注册了对给定项目的兴趣,然后代码的其他部分发布该项目。
答案 2 :(得分:-1)
这不是一个Python问题。最理想的情况是,您希望将进程置于休眠状态并等待操作发生的某种信号,等待时不使用CPU。因此,编写Python代码的情况并非如此,而是要弄清楚使用什么机制使condition
为真,从而等待它。
如果条件是由程序中的另一个线程而不是外部资源设置的简单标志,则需要返回并从头开始学习线程的工作原理。
只有当你等待的东西没有提供你可以等待的任何类型的推送通知时,你才应该考虑在循环中轮询它。 sleep
将有助于减少CPU负载,但不会消除它,并且还会增加响应延迟,因为睡眠必须在您开始处理之前完成。
至于等待事件,事件驱动的范例可能是你想要的,除非你的程序是完全无关紧要的。 Python有Twisted框架。