优雅的退出asyncio事件循环

import asyncio
import functools
import os
import signal

"""
信号值      符号      行为

2          SIGINT    进程终端,CTRL+C

9          SIGKILL   强制终端

15         SIGTEM    请求中断

20         SIGTOP    停止(挂起)进程 CRTL+D
"""


def exit(sign_name):
    print(f"获取信号{sign_name}: exit")
    loop.stop()


loop = asyncio.get_event_loop()
for sign_name in ('SIGINT', 'SIGTERM'):
    loop.add_signal_handler(getattr(signal, sign_name),
                            functools.partial(exit, sign_name))

print(" Ctrl+C 停止运行.")
print(f"pid {os.getpid()}: 发送 SIGINT 和 SIGTERM 信号退出循环")
try:
    loop.run_forever()
finally:
    loop.close()

  

转载于:https://www.cnblogs.com/c-x-a/p/10914179.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker中的优雅退出是指当我们想要停止或重启一个运行中的容器时,我们希望容器能够正常地关闭,并保证容器内的应用程序正确地结束运行。 在Docker中,我们可以通过发送一个信号给容器来实现优雅退出。在默认情况下,当我们使用`docker stop`命令停止容器时,Docker会发送一个SIGTERM信号给容器,然后等待一段时间让容器自己执行清理操作。 容器收到SIGTERM信号后,首先会向容器内运行的主进程发送该信号。主进程收到信号后,可以选择处理该信号并正常退出,或者忽略该信号继续运行。如果主进程处理了SIGTERM信号并正常退出,容器将会停止并退出。 如果容器内的主进程忽略SIGTERM信号或者未能在一定时间内退出,Docker将会发送一个SIGKILL信号给容器,强制终止容器的运行。 为了使容器内的主进程能够正确地处理SIGTERM信号并退出,我们可以在Dockerfile中添加一些设置,例如使用`ENTRYPOINT`或`CMD`指令来指定容器的启动命令,并使用`STOPSIGNAL`指令来设置信号。 另外,我们也可以利用Docker的一些附加功能来实现优雅退出。例如,我们可以使用Docker的生命周期钩子功能,在容器即将停止或重启时执行一些指定的命令,以便容器内的应用程序能够进行一些清理或保存操作。 总之,通过合理设置容器内主进程的信号处理以及利用Docker的附加功能,我们可以实现docker的优雅退出,确保容器内的应用程序能够正确地结束运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值