where
这是在 Linux、Python 3.5.1 上。
what
我正在开发一个监控流程asyncio
,他们在不同地方的任务await
on asyncio.sleep
不同时长的呼叫。
有时我希望能够打断所有所说的话asyncio.sleep
调用并让所有任务正常进行,但我找不到如何做到这一点。一个示例是监控进程的正常关闭。
如何(失败的假设)
我以为我可以发送一个警报信号来达到这种效果,但进程终止了。我尝试用以下命令捕获警报信号:
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
不算太小,也不算太大。
but
有没有办法中断所有运行asyncio.sleep
打电话而我错过了?