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

Posted Jason_WangYing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决多进程中APScheduler重复运行的问题相关的知识,希望对你有一定的参考价值。

问题描述

在我使用iis部署django时,发现本来调试好好的定时任务一直多次执行,自己蒙了半天,在开发环境找了半天没找到问题,最后想起来fastcgi与uwsgi一样,都可以开启多进程,感觉应该是多进程,开启了多个实例的问题,去搜了下网上都是说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('任务计划启动失败')

以上是关于解决多进程中APScheduler重复运行的问题的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

Flask 应用程序中的单个 apscheduler 实例

APScheduler定时任务使用

IDEA中多个进程运行