【发布时间】:2021-09-14 15:07:09
【问题描述】:
我遇到了 python APScheduler 的问题。 我做了一个简单的脚本:
from apscheduler.schedulers.background import BackgroundScheduler
from time import sleep
from datetime import datetime
scheduler = BackgroundScheduler({
'apscheduler.jobstores.default': {
'type': 'redis',
'host': "127.0.0.1",
'port': 6379,
'db': 0,
'encoding': "utf-8",
'encoding_errors': "strict",
'decode_responses': False,
'retry_on_timeout': False,
'ssl': False,
'ssl_cert_reqs': "required"
},
'apscheduler.executors.default': {
'class': 'apscheduler.executors.pool:ThreadPoolExecutor',
'max_workers': '20'
},
'apscheduler.job_defaults.coalesce': 'false',
'apscheduler.job_defaults.max_instances': '3',
'apscheduler.timezone': 'UTC',
}, daemon=False)
scheduler.start()
def testfunc():
with open('./data.log', 'a') as f:
f.write(f'{datetime.now()}\n')
scheduler.add_job(testfunc, 'interval', minutes=1, id='my_job_id')
scheduler.add_job(testfunc, 'date', run_date="2120-1-1 11:12:13", id='my_job_id_2')
while True:
scheduler.print_jobs()
sleep(10)
所以,我将 BackgroundScheduler 与 ThreadPoolExecutor 和 Redis 作业存储一起使用,非常简单,如文档中所述。
它工作正常,添加了任务,我也可以在 redis-cli 中看到数据。 然后我重新启动服务器并再次检查redis中的数据。而我看到的只是 my_job_id_2 任务。 interval 触发器的那个完全消失了。 Redis 设置为每分钟将数据保存到 RDB。如果我在重新启动之前在 redis-cli 中执行 SAVE 命令,也会发生同样的情况。
为什么会这样?
【问题讨论】:
标签: redis python-3.7 apscheduler