首页 > 解决方案 > 可中断睡眠?

问题描述

我目前正在构建一个 python 应用程序,它应该在用户输入的给定时间戳(不是按时间顺序输入)触发函数。
我遇到了一个问题,因为我不希望我的程序忙于等待检查是否输入了必须添加到计时器队列的新时间戳,但也不希望每次新时间戳都创建一大堆线程以等待该时间戳的单一目的进行创建。
我想到的是将它们放在一个线程中并执行可中断睡眠之类的操作,但除此之外我想不出另一种方法:

while timer_not_depleted:
      sleep(1)
      if something_happened:
          break

这本质上是忙于等待。那么关于实现可中断睡眠的任何建议?

标签: pythonmultithreadingeventstimerbusy-waiting

解决方案


我想建议select

调用它的超时等于最近事件的延迟(堆队列是一个很好的数据结构,用于维护未来时间戳的队列)并提供一个套接字(作为rlistarg 中的一个项目),您的程序在其中侦听来自的更新用户。

select套接字有传入数据或发生超时时调用返回。


推荐阅读