侧边栏壁纸
博主头像
学海无涯博主等级

有疑问可发邮件[email protected]

  • 累计撰写 326 篇文章
  • 累计创建 85 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

解决多进程中APScheduler重复运行的问题

利刃
2021-07-01 / 0 评论 / 0 点赞 / 4 阅读 / 1387 字
温馨提示:
本文最后更新于 2024-08-13,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

问题描述

使用uwsgi+django部署生产环境时,由于uwsgi开启多个线程,导致任务计划被执行多次。

解决方式

通过socket接口来判断是否已经启用任务计划,防止计划任务多开,代码如下:

import datetime,socket

from apscheduler.schedulers.background import BackgroundScheduler
from django_apscheduler.jobstores import DjangoJobStore,register_job,register_events
from Data_Display.models import Data_Display_History_Computer
from Data_Display.Modul import Get_Asset_Distribution
# ####################写定时器执行##################
#
#
try:
    sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sock.bind(('127.0.0.1',47200))
except:
    print("已启动一个任务计划进程!")
else:

    sched = BackgroundScheduler()
    sched.add_jobstore(DjangoJobStore(),"default")



    @register_job(sched, 'cron', hour='0', minute='0', second='0',replace_existing=True)
    def Create_Data_Display_History():
        data=Get_Asset_Distribution('主机')
        for line in data:
            Data_Display_History_Computer.objects.create(Name=line['name'],Value=line['value'],Date=datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d'),Create_DateTime=datetime.datetime.now())

    try:

        sched.start()
    except:
        print('任务计划启动失败')



2021-7-1 13:58:16

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区