优雅的退出asyncio事件循环

Posted c-x-a

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优雅的退出asyncio事件循环相关的知识,希望对你有一定的参考价值。

import asyncio
import functools
import os
import signal

"""
信号值      符号      行为

2          SIGINT    进程终端,CTRL+C

9          SIGKILL   强制终端

15         SIGTEM    请求中断

20         SIGTOP    停止(挂起)进程 CRTL+D
"""


def exit(sign_name):
    print(f"获取信号{sign_name}: exit")
    loop.stop()


loop = asyncio.get_event_loop()
for sign_name in (‘SIGINT‘, ‘SIGTERM‘):
    loop.add_signal_handler(getattr(signal, sign_name),
                            functools.partial(exit, sign_name))

print(" Ctrl+C 停止运行.")
print(f"pid {os.getpid()}: 发送 SIGINT 和 SIGTERM 信号退出循环")
try:
    loop.run_forever()
finally:
    loop.close()

  

以上是关于优雅的退出asyncio事件循环的主要内容,如果未能解决你的问题,请参考以下文章

Python asyncio - 使用Task的循环退出已被销毁,但它正在等待处理

Asyncio之EventLoop笔记

Python asyncio/discord.py - 循环退出,任务被破坏,但它处于待处理状态

无法从正在运行的事件循环中调用 asyncio.run()

corroutine RuntimeError中的Asyncio:没有正在运行的事件循环

Asyncio RuntimeError:事件循环已关闭