我有一些幂等的任务。这意味着我不介意它们是否被执行多次,但是我需要它们被执行-并尽快执行。
我面临的一个“问题”是,可以随时重新启动部署在服务器上的Celery worker,我希望,一旦它重新联机,它可以立即从剩下的位置继续处理任务,包括服务器脱机时正在处理的任务。
我一直在调整配置,发现task_acks_late
和task_reject_on_worker_lost.
@app.task(bind=True, task_acks_late=True, task_reject_on_worker_lost=True)
这似乎有助于重新排队任务,但是一旦服务器重新启动,它就不会开始处理待处理的任务,并在Redis中标记为unacked
。
我应该为用例添加其他配置选项吗?
我不知道这是否相关,但是我使用以下命令运行工作程序:
celery --app=tasks.app worker --loglevel INFO