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()
我的 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()