Сельдерей: Как я могу завершить задачу в определенное время?Python

Программы на Python
Ответить
Anonymous
 Сельдерей: Как я могу завершить задачу в определенное время?

Сообщение Anonymous »

Я хочу быть уверенным, что задача будет завершена в определенное время, если она все еще выполняется. Контекст – перегруженный рабочий процесс, задачи которого не выполняются сразу.
Изобразите этого "занятого" рабочего процесса (concurrency=1 для имитации бизнеса):

Код: Выделить всё

uv run celery --app src.tasks.example worker --concurrency 1 --queues celery --loglevel info --hostname default
Я собираюсь запустить эту задачу, которая просто спит в течение количества секунд, указанного в параметре:

Код: Выделить всё

@app.task()
def naptime(seconds: float) -> None:
sleep(seconds)
Я отправляю эту задачу следующим образом:

Код: Выделить всё

naptime.apply_async(args=(3,))
task2 = naptime.apply_async(args=(3,))
start = time()
result = task2.get()
total = time() - start
Я ожидаю, что общее количество будет около 6 (2 задачи по 3 секунды, которые выполняются последовательно), и это действительно достаточно близко.
Теперь я хочу убедиться, что задача2 завершается через 5 секунд после отправки, если она выполняется.
  • Код: Выделить всё

    task2 = naptime.apply_async(args=(3,), time_limit=5)
    => не работает так, как я хочу, потому что это уничтожит задачу через 5 секунд после ее поднятия. К этому времени задача будет выполнена, но позже, чем через 5 секунд после отправки.
  • Код: Выделить всё

    task2 = naptime.apply_async(args=(3,), time_limit=5, expires=5)
    => не работает так, как я хочу, задача не имеет времени истечения.
Примечание: на самом деле я не знаю, как долго будет длиться задача, поэтому я не могу вычислить срок действия (задача S секунд, которую необходимо выполнить T секунд после отправки, может иметь срок действия (TS). Я знаю T, но не S.)
Как я могу убедиться, что задача убит в определенное время?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»