HelloSunPing 2022-04-18 19:07
浏览 329
已结题

apscheduler的一次性任务执行两次问题如何解决?

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
我的解答思路和尝试过的方法

尝试过加异常捕获找到根据出发点,但是没有任何作用,仍会影响主进程,造成假死。

我想要达到的结果
  1. 怎么才能解决这个JobLookupError错误?2. 怎么才能捕获到异常不影响主进程?
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 4月26日
    • 创建了问题 4月18日

    悬赏问题

    • ¥15 永磁直线电机的电流环pi调不出来
    • ¥15 用stata实现聚类的代码
    • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
    • ¥20 docker里部署springboot项目,访问不到扬声器
    • ¥15 netty整合springboot之后自动重连失效
    • ¥15 悬赏!微信开发者工具报错,求帮改
    • ¥20 wireshark抓不到vlan
    • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
    • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
    • ¥15 stata安慰剂检验作图但是真实值不出现在图上