¿Cómo hago para programar mis tareas de manera diferente para los días de semana y los fines de semana en celery beat?
El horario se establece de la siguiente manera en mi archivo settings.py
{ "task_weekday": { "task": "tasks.my_regular_task", "schedule": crontab(minute="0-30", hour="4,5", day_of_week="mon-fri"), "options": {"queue": "queue_name"}, }, "task_weekend": { "task": "tasks.my_regular_task", "schedule": crontab(minute="0-5", hour="10,12", day_of_week="sat,sun"), "options": {"queue": "queue_name"}, }, }Sin embargo, cuando lo configuré, ejecutó el horario del día de la semana hoy (domingo 21/03/2021) en lugar de retomar el horario del fin de semana.
Tengo la zona horaria de la aplicación configurada en 'US/Pacific' y CELERY_ENABLE_UTC está configurado en False .
Después de configurarlo, veo la siguiente entrada de registro, pero ejecuta el programa de tareas de los días de semana.
[2021-03-21 17:57:50,082: DEBUG/MainProcess] Current schedule: <ScheduleEntry: task_weekday tasks.my_regular_task() <crontab: 0-30 4,5 mon-fri * * (m/h/d/dM/MY)> <ScheduleEntry: task_weekend tasks.my_regular_task() <crontab: 0-5 10,12 sat,sun * * (m/h/d/dM/MY)> <ScheduleEntry: celery.backend_cleanup celery.backend_cleanup() <crontab: 0 4 * * * (m/h/d/dM/MY)>También intenté ejecutar las tareas cada pocos minutos para probar qué programa recoge y recoge el programa de fin de semana:
{ "task_weekday": { "task": "tasks.my_regular_task", "schedule": crontab(minute="*/2", hour="*", day_of_week="mon-fri"), "options": {"queue": "queue_name"}, }, "task_weekend": { "task": "tasks.my_regular_task", "schedule": crontab(minute="*/3", hour="*", day_of_week="sat,sun"), "options": {"queue": "queue_name"}, }, } [2021-03-21 18:03:27,075: DEBUG/MainProcess] Current schedule: <ScheduleEntry: task_weekend tasks.my_regular_task() <crontab: */3 * sat,sun * * (m/h/d/dM/MY)> <ScheduleEntry: task_weekday tasks.my_regular_task() <crontab: */2 * mon-fri * * (m/h/d/dM/MY)> <ScheduleEntry: celery.backend_cleanup celery.backend_cleanup() <crontab: 0 4 * * * (m/h/d/dM/MY)> [2021-03-21 18:03:27,076: DEBUG/MainProcess] beat: Ticking with max interval->5.00 minutes [2021-03-21 18:03:27,080: DEBUG/MainProcess] beat: Waking up in 32.91 seconds. [2021-03-21 18:04:00,024: DEBUG/MainProcess] beat: Synchronizing schedule... 2021-03-21 18:04:00,041 | INFO | Self | 736a6a98bd5d456f8a253b5790f5a8e0 | 1 | celery.beat | beat:apply_entry | 271 | Scheduler: Sending due task task_weekday (tasks.my_regular_task) [2021-03-21 18:04:00,041: INFO/MainProcess] Scheduler: Sending due task task_weekday (tasks.my_regular_task) [2021-03-21 18:04:00,060: DEBUG/MainProcess] tasks.my_regular_task sent. id->bdffda9e-ab8a-41dd-a3b1-7ce62a1ab669task_name es un índice único. En la tabla periodictask, un nombre de tarea solo puede estar allí una vez. Entonces, sus dos envíos de trabajo significan que el segundo está sobrescribiendo al primero.
Podría hacer una función de tarea my_regualar_task_weekend() que simplemente llame a my_regular_task() y luego aplique el horario de fin de semana a la nueva tarea.