Повторите задачу сельдерея после того, как мягкое ограничение по времени превысит, когда включено позднее подтверждение - PullRequest
0 голосов
/ 21 января 2020

У меня есть задача, которая выполняется около двух минут, выполняя некоторые операции с БД. Я включил позднее подтверждение, но обнаружил, что задание никогда не повторялось после превышения мягкого ограничения по времени.

Итак, я добавил autoretry_for и retry_backoof , как указано в документации к версии сельдерея, которую я использую. Попытка повторного выполнения опоздавшего задания - это хорошая практика или нет?

Если я не установил autoretry_for, то задача не будет запускаться с того места, где она завершена.

tasks.py

@shared_task(soft_time_limit=20, autoretry_for=(SoftTimeLimitExceeded, ), retry_backoff=True)
def test_func_celery(current_time):
    fake = Faker()
    logger = logging.getLogger()
    time1 = time.perf_counter()
    main_time_end = current_time + 25
    logger.info('Task started here \n \n')

    while time.time() < main_time_end:
        logger.info('Before doing main operations')
        time.sleep(10)
        logger.info(f'Inside Main operation ===>>> {time.time()}')

        while True:
            name = fake.first_name()
            logger.info(f'Inside inner operation for {name}')
            logger.info(f'inner operation before starts for {name}')
            time.sleep(12)
            logger.info(f'Inside inner {name}===>>> {time.time()}')
            logger.info(f'inner operation after finishes for {name}')
            break
        logger.info('Completed Main operation')
        break

    if time.time() >= main_time_end:
        logger.info('Out from main operations')
    time2 = time.perf_counter()
    logger.info(f'Total time =======>>>>>>> {time2 - time1}')
    return None

views.py

def home(request):
    current_time = time.time()
    test_func_celery.apply_async(args=(current_time, ), acks_late=True)
    return HttpResponse("Celery being tested here")

celery.log

[2020-01-21 15:28:30,708: INFO/ForkPoolWorker-7] Task started here 


[2020-01-21 15:28:30,708: INFO/ForkPoolWorker-7] Before doing main operations
[2020-01-21 15:28:40,715: INFO/ForkPoolWorker-7] Inside Main operation ===>>> 1579599820.7153742
[2020-01-21 15:28:40,716: INFO/ForkPoolWorker-7] Inside inner operation for Joe
[2020-01-21 15:28:40,716: INFO/ForkPoolWorker-7] inner operation before starts for Joe
[2020-01-21 15:28:50,680: WARNING/MainProcess] Soft time limit (20s) exceeded for home.tasks.test_func_celery[4234d05e-672e-4565-bdb6-cd3d234c82c4]
[2020-01-21 15:28:50,726: INFO/MainProcess] Received task: home.tasks.test_func_celery[4234d05e-672e-4565-bdb6-cd3d234c82c4]  ETA:[2020-01-21 15:28:51.683861+05:45] 
[2020-01-21 15:28:50,728: INFO/ForkPoolWorker-7] Task home.tasks.test_func_celery[4234d05e-672e-4565-bdb6-cd3d234c82c4] retry: Retry in 1s: SoftTimeLimitExceeded()
[2020-01-21 15:28:51,938: INFO/ForkPoolWorker-7] Task started here 


[2020-01-21 15:28:51,938: INFO/ForkPoolWorker-7] Before doing main operations
[2020-01-21 15:29:01,948: INFO/ForkPoolWorker-7] Inside Main operation ===>>> 1579599841.948412
[2020-01-21 15:29:01,949: INFO/ForkPoolWorker-7] Inside inner operation for Lisa
[2020-01-21 15:29:01,949: INFO/ForkPoolWorker-7] inner operation before starts for Lisa
[2020-01-21 15:29:11,915: WARNING/MainProcess] Soft time limit (20s) exceeded for home.tasks.test_func_celery[4234d05e-672e-4565-bdb6-cd3d234c82c4]
[2020-01-21 15:29:11,965: INFO/MainProcess] Received task: home.tasks.test_func_celery[4234d05e-672e-4565-bdb6-cd3d234c82c4]  ETA:[2020-01-21 15:29:12.917995+05:45] 
[2020-01-21 15:29:11,967: INFO/ForkPoolWorker-7] Task home.tasks.test_func_celery[4234d05e-672e-4565-bdb6-cd3d234c82c4] retry: Retry in 1s: SoftTimeLimitExceeded()
[2020-01-21 15:29:13,136: INFO/ForkPoolWorker-7] Task started here 


[2020-01-21 15:29:13,136: INFO/ForkPoolWorker-7] Out from main operations
[2020-01-21 15:29:13,136: INFO/ForkPoolWorker-7] Total time =======>>>>>>> 0.00026752900157589465
[2020-01-21 15:29:13,138: INFO/ForkPoolWorker-7] Task home.tasks.test_func_celery[4234d05e-672e-4565-bdb6-cd3d234c82c4] succeeded in 0.05194566200225381s: None

Есть ли лучшее решение для описания сценария, описанного выше? Это было бы очень полезно. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...