在关闭服务器之前,我希望将状态保存到后台aiohttp协同服务的数据库中。我正在考虑创建一个全局协同作业数组,这些作业需要完成并在shutdown处理程序中执行一个shutdown。
这是正确的做法吗?
发布于 2022-07-05 15:39:04
我不确定我是否理解您所说的“后台aiohttp协同服务数据库”是什么意思,但是,就关闭时的清理操作而言,您可以:
使用信号处理程序
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
import asyncio
async def my_coro():
try:
# Normal interaction with aiohttp
while True:
pass
except asyncio.CancelledError:
cleanup_actions()如果您可以假设,在关闭时,事件循环将被干净地停止,那么您可以指望在循环关闭之前抛出运行中的协同任务。
https://stackoverflow.com/questions/72697944
复制相似问题