【发布时间】:2021-03-03 16:47:35
【问题描述】:
我的 HTTP 使用 aiohttp.web 模块运行:
import asyncio as aio
import aiohttp.web as web
server = web.Application()
server.add_routes([...])
web.run_app(server, port=8080)
web.run_app 中的代码使用主事件循环,它处理KeyboardInterrupt 异常并在按下 Ctrl+C 时退出,在简单的应用程序中。但是,我需要终止所有线程,而 aiohttp.web 不会,并且程序不会退出。
如何覆盖aiohttp.web.Application的默认信号处理器?
【问题讨论】:
-
如果您控制线程的创建方式,您可以使用
daemon=True,这样它们就不会停止主线程的退出。 -
另一种直接的方法是使用
try: web.run_app(server, port=8000) finally: <tell threads to exit>。除非您真正了解细节,否则手动处理信号很少是一个好主意。 -
tks,添加 daemon=True 工作
标签: http asynchronous webserver signals python-asyncio