apscheduler: returned more than one DjangoJobExecution -- it returned 2

Viewed 448

In my proyect scheduler return this error in the execute job, help me please

this is my error in cosole, then execute the program

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!

This is my code

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!")
2 Answers

Not sure if you're still having this issue. I have same error and found your question. Turned out this happens only in dev environment.

Because python3 manage.py runserver starts two processes by default, the code seems to register two job records and find two entries at next run time.

With --noreload option, it starts only one scheduler thread and works well. As name implies, it won't reload changes you make automatically though.

python3 manage.py runserver --noreload

not sure if you're still having this issue. i think you can use socket , socket can use this issue.

look this enter image description here

Related