我在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开始转移。但是,当您仅从数十个甚至数千个数千个任务重新安排单个任务时,我认为这不是一个好主意。
总而言之,我认为这是管理个人任务的更好方法,或者我的误解告诉我,芹菜能够实现原本不适合的目标。
欢迎并提出想法和建议。