python - apscheduler:返回了多个 DjangoJobExecution -- 它返回了 2
问题描述
在我的项目调度程序中,在执行作业中返回此错误,请帮助我
这是我在cosole中的错误,然后执行程序
Error notifying listener
Traceback (most recent call last):
File "C:\Users\angel\project\venv\lib\site-packages\apscheduler\schedulers\base.py", line 836, in _dispatch_event
cb(event)
File "C:\Users\angel\project\venv\lib\site-packages\django_apscheduler\jobstores.py", line 53, in handle_submission_event
DjangoJobExecution.SENT,
File "C:\Users\angel\project\venv\lib\site-packages\django_apscheduler\models.py", line 157, in atomic_update_or_create
job_id=job_id, run_time=run_time
File "C:\Users\angel\project\venv\lib\site-packages\django\db\models\query.py", line 412, in get
(self.model._meta.object_name, num)
django_apscheduler.models.DjangoJobExecution.MultipleObjectsReturned: get() returned more than one DjangoJobExecution -- it returned 2!
这是我的代码
class Command(BaseCommand):
help = "Runs apscheduler."
scheduler = BackgroundScheduler(timezone=settings.TIME_ZONE, daemon=True)
scheduler.add_jobstore(DjangoJobStore(), "default")
def handle(self, *args, **options):
self.scheduler.add_job(
delete_old_job_executions,
'interval', seconds=5,
id="delete_old_job_executions",
max_instances=1,
replace_existing=True
)
try:
logger.info("Starting scheduler...")
self.scheduler.start()
except KeyboardInterrupt:
logger.info("Stopping scheduler...")
self.scheduler.shutdown()
logger.info("Scheduler shut down successfully!")
解决方案
不确定您是否仍然遇到此问题。我有同样的错误并找到了你的问题。原来这仅发生在开发环境中。
因为python3 manage.py runserver
默认启动了两个进程,所以代码好像注册了两个作业记录,下次运行时会找到两个入口。
使用--noreload
选项,它只启动一个调度程序线程并且运行良好。顾名思义,它不会自动重新加载您所做的更改。
python3 manage.py runserver --noreload
推荐阅读
- babeljs - 无法使用导入导入补间
- java - 从字符串中删除空格和标记
- scala - scala中带有替代错误模拟服务器的重载方法值withBody
- angular - Angular - 错误 TS2339:Angular 7 中的“对象”类型上不存在属性“数据”
- node.js - 无法将快速路由路径与查询参数匹配
- javascript - 如何在javascript中将[object HTMLDivElement]字符串化为html字符串
- android - Android - 使用 SurfaceView 和 Camera2 API 处理屏幕方向
- list - Flutter 水平列表视图点指示器
- sql - 表中存在的最后一天
- javascript - 像`map()`和`reduce()`这样的高阶函数如何接收它们的数据?