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)

你可能感兴趣的:(python,python,fastapi)