【发布时间】:2016-09-09 15:25:14
【问题描述】:
在哪里
这是在 Linux,Python 3.5.1 上。
什么
我正在与asyncio 一起开发一个监控进程,它在await 的各个地方执行各种持续时间的asyncio.sleep 呼叫。
有时我希望能够中断所有所说的asyncio.sleep 呼叫并让所有任务正常进行,但我找不到如何做到这一点。一个示例是正常关闭监视进程。
如何(假设失败)
我认为我可以发送一个 ALRM 信号来达到这种效果,但进程终止了。我尝试通过以下方式捕获 ALRM 信号:
def sigalrm_sent(signum, frame):
tse.logger.info("got SIGALRM")
signal.signal(signal.SIGALRM, sigalrm_sent)
然后我得到关于捕获 SIGALRM 的日志行,但 asyncio.sleep 调用没有中断。
如何(杂牌)
此时,我将所有 asyncio.sleep 调用替换为对该协程的调用:
async def interruptible_sleep(seconds):
while seconds > 0 and not tse.stop_requested:
duration = min(seconds, tse.TIME_QUANTUM)
await asyncio.sleep(duration)
seconds -= duration
所以我只需要选择一个不太小也不太大的TIME_QUANTUM。
但是
有没有办法中断所有正在运行的asyncio.sleep 呼叫而我错过了它?
【问题讨论】:
标签: python linux async-await python-asyncio