18年你的相关文档链接:https://blog.csdn.net/weixin_39745269/article/details/111010205
问题遇到的现象和发生背景
jobstores = {
"default": RedisJobStore(...)
}
executors = {
'default': ThreadPoolExecutor(20),
}
job_defaults = {
'coalesce': True,
'max_instances': 3,
'misfire_grace_time': 7200,
}
BackgroundScheduler(
timezone="Asia/Shanghai",
jobstores=jobstores,
executors=executors,
job_defaults=job_defaults,
)
job = self.scheduler.add_job(catch_exception(func, JobLookupError), kwargs=func_kwargs)
问题相关代码,请勿粘贴截图
默认类型是一次性调度器,一次性调度器,在执行完工作任务后会自动删除工作
运行结果及报错内容
我在工作目标函数的外层加了异常捕获,既没有很优雅的捕获到JobLookupError,不影响主进程,而且对于这种一次性任务异常报JobLookupError错误,并且是在该任务成功执行之后(我对任务进行监听,self._scheduler.add_listener(listener, EVENT_JOB_EXECUTED),所以可以看到任务也是被正常执行了)
Traceback (most recent call last):
File "/usr/local/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/usr/local/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.7/site-packages/apscheduler/schedulers/blocking.py", line 30, in _main_loop
wait_seconds = self._process_jobs()
File "/usr/local/lib/python3.7/site-packages/apscheduler/schedulers/base.py", line 997, in _process_jobs
self.remove_job(job.id, jobstore_alias)
File "/usr/local/lib/python3.7/site-packages/apscheduler/schedulers/base.py", line 621, in remove_job
raise JobLookupError(job_id)
apscheduler.jobstores.base.JobLookupError: 'No job by the id of 958e40abbc354092ad4542d4ca179b76 was found'
2022-04-18 16:09:02,492 logs/periodic_task_script_task.log: INFO 成功发送定时消息,消息码:no_payment_order_message, task_id:e1e749bc-9b55-4e65-a630-41ce29b046b4, data:{'order_id': 976431}
INFO:logs/periodic_task_script_task.log:成功发送定时消息,消息码:no_payment_order_message, task_id:e1e749bc-9b55-4e65-a630-41ce29b046b4, data:{'order_id': 976431}
2022-04-18 16:09:02,494 logs/periodic_task_script_delayed_task.log: INFO 成功更新延时消息发送时间,消息id=76398, res=1
INFO:logs/periodic_task_script_delayed_task.log:成功更新延时消息发送时间,消息id=76398, res=1
2022-04-18 16:09:02,494 logs/scheduler.log: INFO 任务照常运行...958e40abbc354092ad4542d4ca179b76
INFO:logs/scheduler.log:任务照常运行...958e40abbc354092ad4542d4ca179b76
我的解答思路和尝试过的方法
尝试过加异常捕获找到根据出发点,但是没有任何作用,仍会影响主进程,造成假死。
我想要达到的结果
- 怎么才能解决这个JobLookupError错误?2. 怎么才能捕获到异常不影响主进程?