如何正确管理芹菜预定任务

时间:2020-08-30 12:52:24

标签: python celery scheduled-tasks

我在Celery中设置了一个任务(功能),并计划在不同时间运行多组参数。对于每个任务,我使用apply_async来安排它们以及手动分配的task_id

在某些情况下,我可能不得不重新安排一些任务,但是上一次我检查不了。

实现此目的的另一种方法是撤销旧任务,然后重新安排它们。但是由于我为每个任务分配了一个自定义task_id,由于how celery revoke works的逻辑,计划中的新任务将立即被丢弃(如下所述)。

celery_1    | [2020-08-29 20:25:37,320: INFO/MainProcess] Tasks flagged as revoked: renew_UCE_M8A5yxnLfW0KghEeajjw
celery_1    | [2020-08-29 20:25:47,903: INFO/MainProcess] Received task: tubee.tasks.renew_channels[renew_UCE_M8A5yxnLfW0KghEeajjw]  ETA:[2020-09-02 20:15:20+00:00]
celery_1    | [2020-08-29 20:25:47,903: INFO/MainProcess] Discarding revoked task: tubee.tasks.renew_channels[renew_UCE_M8A5yxnLfW0KghEeajjw]

我目前的解决方法是在每个task_id之后添加一个随机uuid。不够完美,但仍然可以。

所以我的问题是,是否有更好的方法来管理单个任务?

我知道有一个purge选项可以将队列清除为干净状态,并从screatch开始转移。但是,当您仅从数十个甚至数千个数千个任务重新安排单个任务时,我认为这不是一个好主意。

总而言之,我认为这是管理个人任务的更好方法,或者我的误解告诉我,芹菜能够实现原本不适合的目标。

欢迎并提出想法和建议。

0 个答案:

没有答案