Python 可中断睡眠?
我目前正在构建一个python应用程序,它应该在用户输入的给定时间戳(不是按时间顺序输入)触发函数。Python 可中断睡眠?,python,multithreading,events,timer,busy-waiting,Python,Multithreading,Events,Timer,Busy Waiting,我目前正在构建一个python应用程序,它应该在用户输入的给定时间戳(不是按时间顺序输入)触发函数。 我遇到了一个问题,因为我不希望我的程序忙于等待检查是否输入了一个必须添加到计时器队列的新时间戳,但也不希望每次创建一个新时间戳时都创建一整组线程,因为它的单一用途是等待该时间戳。 我想到的是将所有这些放在一个线程中,然后做一些类似于可中断睡眠的事情,但除了这个,我想不出其他方法: while timer_not_depleted: sleep(1) if somethin
我遇到了一个问题,因为我不希望我的程序忙于等待检查是否输入了一个必须添加到计时器队列的新时间戳,但也不希望每次创建一个新时间戳时都创建一整组线程,因为它的单一用途是等待该时间戳。
我想到的是将所有这些放在一个线程中,然后做一些类似于可中断睡眠的事情,但除了这个,我想不出其他方法:
while timer_not_depleted:
sleep(1)
if something_happened:
break
基本上就是忙着等待。
那么,有什么关于实现可中断睡眠的建议吗?我想建议
调用它时,超时等于最近事件的延迟(这是一种很好的数据结构,可以维护未来时间戳的队列),并提供一个套接字(作为rlist
arg中的一个项目),在该套接字中,您的程序侦听来自用户的更新
select
调用在套接字有传入数据或超时发生时返回。您使用线程的直觉是正确的。以下施工主工可以工作:
- 主线程产生一个等待“作业”的工作线程李>
- 两个线程共享一个-每当需要调度一个新作业时,主线程都会将一个作业规范放入队列中李>
- 同时,工作线程执行以下操作:
- 维护未来要运行的作业的单独列表,并跟踪在下一个作业运行之前保持睡眠的时间李>
- 通过打电话继续收听新工作李>
- 在这种情况下,如果在超时之前没有计划新作业,
将引发Queue.get
异常-此时工作线程应运行计划函数并返回轮询。如果同时计划了一个新作业,Empty
返回新作业,这样您就可以更新Queue.get
值,然后返回等待状态timeout