python - 删除作业后Python APSCheduler抛出异常
问题描述
我在 redis 中添加作业,并在作业完成后添加了一个事件处理程序。在事件处理程序中,我正在返回值,基于该值我从作业商店中删除作业 ID。它已成功删除,但立即引发异常。
代码
from datetime import datetime
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.events import EVENT_JOB_EXECUTED
import logging
logging.basicConfig()
scheduler = BackgroundScheduler()
scheduler.add_jobstore('redis')
scheduler.start()
def tick():
print('Tick! The time is: %s' % datetime.now())
return 'success'
def removing_jobs(event):
if event.retval == 'success':
scheduler.remove_job(event.job_id)
scheduler.add_listener(removing_jobs, EVENT_JOB_EXECUTED)
try:
count = 0
while True:
count += 1
time.sleep(10)
job_ret = scheduler.add_job(tick, 'interval', id = str(count), seconds=10)
except (KeyboardInterrupt, SystemExit):
scheduler.shutdown()
例外
Exception in thread APScheduler:
Traceback (most recent call last):
File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
self.run()
File "/usr/lib/python3.5/threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
File "/.virtualenvs/py3/lib/python3.5/site-packages/apscheduler/schedulers/blocking.py", line 30, in _main_loop
wait_seconds = self._process_jobs()
File "/.virtualenvs/py3/lib/python3.5/site-packages/apscheduler/schedulers/base.py", line 995, in _process_jobs
jobstore.update_job(job)
File "/.virtualenvs/py3/lib/python3.5/site-packages/apscheduler/jobstores/redis.py", line 91, in update_job
raise JobLookupError(job.id)
apscheduler.jobstores.base.JobLookupError: 'No job by the id of 1 was found'
解决方案
简而言之:您正在处理正在删除的作业;所以你应该在执行之外删除作业。
那是因为调度器不知道作业的执行会做什么;所以它启动tick
并将一个job
对象发送到redis
jobstore
认为它将再次执行的想法。在此之前,EVENT_JOB_LISTENER
发射removing_jobs
.
问题是,当redis
'jobstore
获得更新其状态的作业时,它已经被删除,因此它会引发JobLookupError
.
推荐阅读
- kotlin - 如何在 GitHub Actions 上运行 Kotlin 脚本?
- python-3.x - 使用 asyncio 访问网络时出错。“ConnectionResetError: [WinError 64] 指定的网络名称不再可用”
- r - 在 R 中按组执行操作
- tomcat - 在 IntelliJ IDEA 上配置本地 Tomcat 服务器
- ios - 在 iOS Flutter webview 应用程序中从左滑动返回到上一个屏幕
- continuous-integration - 使用 PyQT 运行 CI 测试
- azure - 如何将管道变量传递给参数文件以进行蓝图分配
- php - 我编写代码简单更新及其运行但名称字段值在输入框中未正确获取,它仅在空白字符串之前获取
- angular - Angular / Nebular 主题颜色 - 这是哪个
- asp.net-mvc - 如何在 OnAuthorizationCodeReceived 中访问会话