Python: 如何将信号处理程序添加到 asyncio HTTP 服务器

Python: How to add signal handler to asyncio HTTP server

我的 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 的默认信号处理程序?

感谢@user4815162342的评论,解决问题的2个:

解决方案 1:添加 daemon=True

my_thread = Thread(target=..., daemon=True)

解决方案 2:将 web.run_app 包装在 try 块中:

try:
    web.run_app(server,...)
finally:
    terminate_threads()