【问题标题】:Python: How to add signal handler to asyncio HTTP serverPython:如何将信号处理程序添加到异步 HTTP 服务器
【发布时间】: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


【解决方案1】:

感谢cmets中的@user4815162342,问题的2个解决方案:

解决方案一:添加daemon=True

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

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

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

【讨论】:

    猜你喜欢
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    相关资源
    最近更新 更多