Получить количество активных экземпляров для заданий BackgroundScheduler - PullRequest
3 голосов
/ 17 июня 2020

У меня есть простой BackgroundScheduler и простая задача. BackgroundScheduler настроен на запуск только одного экземпляра для этой задачи:

from apscheduler.schedulers.background import BackgroundScheduler

scheduler.add_job(run_task, 'interval', seconds=10)
scheduler.start()

Когда задача запускается, ее выполнение занимает гораздо больше 10 секунд, и я получаю предупреждение:

Execution of job "run_tasks (trigger: interval[0:00:10], next run at: 2020-06-17 18:25:32 BST)" skipped: maximum number of running instances reached (1)

Это работает, как ожидалось.

Моя проблема в том, что я не могу найти способ проверить, запущен ли экземпляр этой задачи в данный момент.

В docs , есть много способов получить все и отдельные запланированные задачи, но я не могу найти способ проверить, выполняется ли задача в данный момент или нет. В идеале я бы хотел что-то вроде:

def job_in_progress():
    job = scheduler.get_job(id=job_id)
    instances = job.get_instances()

    return instances > 0

Есть идеи?

1 Ответ

3 голосов
/ 17 июня 2020

Не очень хорошо, потому что вам нужно получить доступ к частному атрибуту, но это единственное, что я смог найти.

def job_in_progress():
    job = scheduler.get_job(id=job_id)
    instances = scheduler._instances[job_id]

    return instances > 0

Если у кого-то есть другая идея, не используйте ее.

...