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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...