Python的time.sleep无限期休眠

6
在Python的时间模块中,有一个名为sleep()的函数,可以让Python在继续执行程序之前等待x秒钟。是否有一种方法可以无限期地执行此操作,直到满足某个条件为止?例如:
while True:
    time.sleep()
    if x:
        break

time.unsleep()

我正在尝试为我的PyGame程序创建一个暂停功能。任何帮助都将不胜感激。


2
线程必须要睡眠吗?从看起来的情况来看,它并不需要 - 一个无限循环直到条件满足应该就足够了。 - Zizouz212
一种比 sleep() 函数更好的暂停方式是通过设置一个标志 (paused = True) 并且在游戏状态为暂停时不更新游戏状态。 - Ry-
3
@Zizou212 这会导致游戏在暂停时使用100%的CPU,这是很不礼貌的(会使电脑变慢和发热,消耗电力并且耗尽电池 - 毫无意义)。至少在循环中加入一个短暂的休眠时间。 - marcelm
一些与答案相关的内容请参考:https://dev59.com/7WIj5IYBdhLWcg3whFa4 - 0 _
3个回答

4
类似这样的内容:
while not x: time.sleep(0.1)

该函数将等待,直到x为true,在每次检查之间暂停十分之一秒。这通常足够短,以至于在x变为true的时候脚本看起来似乎能立即响应(从人类角度而言)。如果这不够快,你可以使用0.01代替。根据我的经验,今天的计算机速度已经足够快了,即使每百分之一秒检查一次简单条件也不会对CPU使用产生什么影响。

当然,x应该是稍有变化的东西,例如一个函数调用。


100毫秒和10毫秒都太慢了,简直令人难以置信。 - undefined

4

你在问题中的代码表明你希望有其他线程来恢复你的程序。在这种情况下,你可以使用resumed = threading.Event()。你可以在一个线程中创建它,并将其传递到另一个线程中:

while not resumed.wait(): # wait until resumed
    "continue waiting"

调用resumed.set()方法可立即恢复此代码。

我正在尝试为我的PyGame程序制作暂停功能。感谢任何帮助。

使用pygame.time。通常,您有一个主循环,在其中更新游戏状态,并在循环结束时调用clock.tick(60) # 60 fps。在这种情况下,仅需使用paused标志即可跳过更新。


1
一种变化是forever = threading.Event(); forever.wait()。这对于一个唯一目的是通过设置处理程序(通过signal)来处理中断的进程非常有用。参见:https://groups.google.com/d/msg/gevent/Abtxtz3aZmQ/vrS7kTCqVY0J - 0 _

0
您可以按照以下方式启动一个线程:

import sys    
import time
from threading import Thread

prepare_to_stop = 0

def in_background_thread():
    while not prepare_to_stop:
        # Program code here
        print(prepare_to_stop)
        time.sleep(0.1)

try:
    th = Thread(target=in_background_thread)
    th.start()
    print("\nProgram will shut down after current operation is complete.\n")
    time.sleep(10**8)
except KeyboardInterrupt:
    prepare_to_stop = 1

print("Program shutting down...")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接