Python sanic AsyncIOScheduler 的单例模式

sanic 是个异步框架。可以配置多个worker ,执行定时任务时,也会执行多遍。期望通过单例模式,确保只运行一次。

解决思路。AsyncIOScheduler函数有没有自带的单例模式,答案无。网上有没有相关做法,搜集半天,没有太好的办法。试过全局变量,协程共享变量等,均无效。试着用进程的共享变量来解决协程的冲突,有点杀鸡用牛刀。但是能杀,那就用吧。

代码如下。

from apscheduler.schedulers.asyncio import AsyncIOScheduler
from multiprocessing import Value
import asyncio

scheduler_count = Value("i",1)
lock = asyncio.Lock()

@app.after_server_start
async def setup_scheduler(app):
    async with lock:
        if scheduler_count.value > 0:
            scheduler_count.value -= 1
            scheduler = AsyncIOScheduler()
            scheduler.start()
posted @ 2023-09-28 13:36  不避风云  阅读(85)  评论(0编辑  收藏  举报