python在server程序中运行定时任务以及优雅退出

话不多说,上代码

def job():
    ticker = threading.Event()
    while not ticker.wait(60):
        Cron().main()

def start():
    cro=threading.Thread(target=job)
    cro.start()
    h = '127.0.0.1'
    port = 9007  
    dic = {"host": h,
           "port": port,
           "log_level": "error",
           "reload":True,
           }    
    uvicorn.run('ctrm:app', **dic)

但是这么运行会有一个问题,就是ctrl c退出有可能定时任务正运行被打断,结合这个代码,仅仅展示最核心部分,注意信号量去sigint,兼容性更强。

import signal
import time,os


def signal_handler(signum, frame):
    print('收到要杀死我的信号: ', signum)
    # 在这里处理最后的事情
    print ("下面的代码是自杀")
    os.kill(os.getpid(), signal.SIGINT)


signal.signal(signal.SIGTERM, signal_handler)
signal.signal(signal.SIGINT, signal_handler)
while True:
    print ("main")
    time.sleep(5)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值