首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理aiohttp内部的优雅关闭?

如何处理aiohttp内部的优雅关闭?
EN

Stack Overflow用户
提问于 2022-06-21 08:58:06
回答 1查看 304关注 0票数 4

在关闭服务器之前,我希望将状态保存到后台aiohttp协同服务的数据库中。我正在考虑创建一个全局协同作业数组,这些作业需要完成并在shutdown处理程序中执行一个shutdown

这是正确的做法吗?

EN

回答 1

Stack Overflow用户

发布于 2022-07-05 15:39:04

我不确定我是否理解您所说的“后台aiohttp协同服务数据库”是什么意思,但是,就关闭时的清理操作而言,您可以:

使用信号处理程序

代码语言:javascript
复制
import asyncio
import signal


loop = asyncio.get_event_loop()
loop.add_signal_handler(signal.SIGINT, my_signal_handler, *additional_args_list)

在Unix设置中,如果您知道应用程序将被某个特定信号中断,则可以对该信号执行选择性的清理操作。有关进一步信息,请参见loop.add_signal_handler(signum, callback, *args)

注意:您可以使用一个可调用的类,而不是一个回调函数,这样类实例可以保存对关闭期间希望与之交互的任何资源的引用,例如您在问题中提到的协同操作。

Catch asyncio.CancelledError

代码语言:javascript
复制
import asyncio


async def my_coro():
    try:
        # Normal interaction with aiohttp
        while True:
            pass
    except asyncio.CancelledError:
        cleanup_actions()

如果您可以假设,在关闭时,事件循环将被干净地停止,那么您可以指望在循环关闭之前抛出运行中的协同任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72697944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档