nonebot / plugin-apscheduler

APScheduler Support for NoneBot2
https://nonebot.dev/docs/best-practice/scheduler
MIT License
83 stars 9 forks source link

关于定时器运行时间长后出现的问题,想请教一下 #3

Closed Quan666 closed 3 years ago

Quan666 commented 3 years ago

描述

我的 ELF_RSS 插件创建 的 IntervalTrigger 间隔触发任务,在运行一段时间后(2~3左右),会出现某个任务一直报如下警告,导致该任务不能正常进行,像卡住一样。

[WARNING] apscheduler | Execution of job "check_update (trigger: interval[0:05:00], next run at: 2021-03-13 18:58:47 CST)" skipped: maximum number of running instances reached (1)

image

我目前的解决措施是使用一个装饰器来设置超时时间,主动结束任务。 相关代码:https://github.com/Quan666/ELF_RSS/blame/6d95b84010d84a8fd889e483a0579d98db25ffe8/src/plugins/ELF_RSS2/RSS/util.py#L1

这在开始运行一段时间内是正常工作的 image 但时间久了会出现上面同样的警告,然后导致不能按预期运行。

我的定时器创建相关代码:https://github.com/Quan666/ELF_RSS/blob/2.0/src/plugins/ELF_RSS2/RSS/my_trigger.py

环境:

Linux Centos7.x Docker version 1.13.1, build 0be3e21/1.13.1 Python 3.8 APScheduler~=3.7.0 定时器任务数量:20+

复现:

未能复现,但在运行一段时间后会出现

Quan666 commented 3 years ago

https://github.com/Quan666/ELF_RSS/issues/48

yanyongyu commented 3 years ago

这是 apscheduler 的设计导致的

max_instances=1导致同时只能有一个任务实例执行,如果下一次触发的时候上一个任务尚未执行完毕就会跳过这一次执行

Quan666 commented 3 years ago

所以我给他设置了超时时间,保证他不会出现上个任务未执行完毕的情况