微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

APSchedule 有时会错过一些触发器

如何解决APSchedule 有时会错过一些触发器

我正在尝试实施一个计划,该计划将全天运行,并且有开启时间和关闭时间。所以我不想在状态 1 下调用方法在状态 1 中保持一段时间,而它们在状态 0 下调用相同的方法并保持另一个时期。所以基本上一盏灯会打开 1 分钟,它们会关闭 4 分钟,总是在状态之间切换。我已经尝试更改/修改工作,使用 Interval 和 Cron,它们都给了我同样的问题。所以问题是它会完美运行几个小时,并且他们无法触发事件一两次。有时它只是不触发。日志没有显示任何内容

我制作了一个简单的代码片段用于测试:

import time
import logging
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.events import EVENT_JOB_ERROR,EVENT_JOB_EXECUTED
from datetime import datetime

LOG_LEVEL = logging.INFO
LOG_FILE = "/var/log/test.log"
LOG_FORMAT = "%(asctime)s %(levelname)s %(message)s"
logging.basicConfig(filename=LOG_FILE,format=LOG_FORMAT,level=LOG_LEVEL)

def rele(on,off,state):
    print(str(datetime.Now()) + ': ' + str(state))
    state = str(1 - int(state))
    return on + ',' + off + ',' + state

def my_listener(event):
    if(event.exception):
        print('The job crashed: ' + event.job_id)
    else:
        splited = event.retval.split(',')
        jobid = event.job_id
        sched.remove_job(event.job_id)
        period = 1
        if(splited[2] == '0'):
            period = int(splited[0])
        else:
            period = int(splited[1])
        sched.add_job(rele,'interval',minutes=period,args=[splited[0],splited[1],splited[2]],id=jobid,misfire_grace_time=None)

sched = BackgroundScheduler(daemon=True)
sched.add_listener(my_listener,EVENT_JOB_EXECUTED | EVENT_JOB_ERROR)
sched.add_job(rele,minutes=1,args=['1','4','1'],id='rele1',misfire_grace_time=None)
sched.start()
print(str(datetime.Now()) + ": start")

while(True):
    time.sleep(.1)

日志是:

2021-06-23 13:01:51,094 INFO Running job "sensor (trigger: interval[0:01:00],next run at: 2021-06-23 13:02:51 BST)" (scheduled at 2021-06-23 13:01:51.091280+01:00)
2021-06-23 13:01:51,096 INFO Job "sensor (trigger: interval[0:01:00],next run at: 2021-06-23 13:02:51 BST)" executed successfully
2021-06-23 13:01:51,598 INFO Removed job rele1
2021-06-23 13:01:52,102 INFO Added job "sensor" to job store "default"
2021-06-23 13:05:52,102 INFO Running job "sensor (trigger: interval[0:04:00],next run at: 2021-06-23 13:05:52 BST)" (scheduled at 2021-06-23 13:05:52.100417+01:00)
2021-06-23 13:05:52,104 INFO Job "sensor (trigger: interval[0:04:00],next run at: 2021-06-23 13:05:52 BST)" executed successfully
2021-06-23 13:05:52,607 INFO Removed job rele1
2021-06-23 13:05:53,111 INFO Added job "sensor" to job store "default"
2021-06-23 13:09:52,next run at: 2021-06-23 13:09:52 BST)" (scheduled at 2021-06-23 13:09:52.100417+01:00)
2021-06-23 13:09:52,105 INFO Job "sensor (trigger: interval[0:04:00],next run at: 2021-06-23 13:13:52 BST)" executed successfully
2021-06-23 13:09:52,608 INFO Removed job rele1
2021-06-23 13:09:53,112 INFO Added job "sensor" to job store "default"
2021-06-23 13:10:53,113 INFO Running job "sensor (trigger: interval[0:01:00],next run at: 2021-06-23 13:11:53 BST)" (scheduled at 2021-06-23 13:10:53.110220+01:00)
2021-06-23 13:10:53,114 INFO Job "sensor (trigger: interval[0:01:00],next run at: 2021-06-23 13:11:53 BST)" executed successfully
2021-06-23 13:10:53,616 INFO Removed job rele1
2021-06-23 13:10:54,121 INFO Added job "sensor" to job store "default"

该日志在控制台中的结果是:

2021-06-23 13:01:51.095290: 0
2021-06-23 13:05:52.103565: 1
2021-06-23 13:09:52.103524: 1
2021-06-23 13:10:53.114225: 0

输出的扩展版本:

2021-06-23 23:31:40.113978: 0
2021-06-23 23:35:40.121087: 1
2021-06-23 23:36:40.127794: 0
2021-06-23 23:40:40.135061: 1
2021-06-23 23:44:40.134991: 1
2021-06-23 23:45:40.143204: 0
2021-06-23 23:49:40.149844: 1
2021-06-23 23:50:40.156796: 0
2021-06-23 23:54:40.163674: 1
2021-06-23 23:55:40.169375: 0
2021-06-23 23:59:40.177340: 1
2021-06-24 00:00:40.184118: 0

我运行的是带有 Python 2.7 的 RaspBerry Pi 3。

提前致谢。

AF

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。