Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redis 在芹菜中,如何确保在工人崩溃时重试任务 首先请不要把这个问题看成是的重复。_Redis_Scheduled Tasks_Celery_Django Celery_Celery Task - Fatal编程技术网

Redis 在芹菜中,如何确保在工人崩溃时重试任务 首先请不要把这个问题看成是的重复。

Redis 在芹菜中,如何确保在工人崩溃时重试任务 首先请不要把这个问题看成是的重复。,redis,scheduled-tasks,celery,django-celery,celery-task,Redis,Scheduled Tasks,Celery,Django Celery,Celery Task,我设置了一个使用芹菜和redis作为broker和result\u后端的环境。我的问题是如何确保当芹菜工人崩溃时,当芹菜工人恢复时,所有计划的任务都会重新尝试 我已经看到了一些建议,建议使用芹菜\u ACKS\u LATE=True,这样代理将重新驱动任务,直到它得到一个ACK,但在我的情况下,它不起作用。每当我安排一项任务时,它都会立即转到工作进程,工作进程会将任务持续到计划的执行时间。让我举一些例子: 我正在安排这样的任务:res=test\u task.apply\u async(coun

我设置了一个使用
芹菜
redis
作为
broker
result\u后端
的环境。我的问题是如何确保当芹菜工人崩溃时,当芹菜工人恢复时,所有计划的任务都会重新尝试

我已经看到了一些建议,建议使用
芹菜\u ACKS\u LATE=True
,这样代理将重新驱动任务,直到它得到一个ACK,但在我的情况下,它不起作用。每当我安排一项任务时,它都会立即转到工作进程,工作进程会将任务持续到计划的执行时间。让我举一些例子:

我正在安排这样的任务:
res=test\u task.apply\u async(countdown=600)
,但在芹菜工人日志中,我立即可以看到类似这样的内容:
Got task from broker:test\u task[a137c44e-b08e-4569-8677-f84070873fc0]eta:[2013-01-…]
。现在,当我杀死芹菜工人时,这些预定任务就丢失了。我的设置:

BROKER_URL = "redis://localhost:6379/0"  
CELERY_ALWAYS_EAGER = False  
CELERY_RESULT_BACKEND = "redis://localhost:6379/0"  
CELERY_ACKS_LATE = True

显然这就是芹菜的行为。 当工作进程被突然终止(但调度进程未终止)时,即使您的acks_late=True,消息仍将被视为“失败”

动机(据我所知)是,如果消费者因为内存不足而被操作系统杀死,那么重新交付相同的任务就没有意义了

你可以在这里看到确切的问题:


我实际上不同意这种行为。在我看来,不承认会更有意义。

您使用的是哪种芹菜版本?看一看这个帖子,它可能会帮助你感谢链接。芹菜版是v3.0.12(交叉幻灯片),现在我意识到任务并没有完全丢失。它确实是在埃塔时间送到芹菜的。因此,我猜行为是这样的:当一个任务被调度时,它会立即被交付给工作者,而代理会等待确认。如果工作进程未在ETA内确认,则它将尝试重新发送,从而确保任务得到执行。@aqs但如果
。当计划任务时,它将立即交付给工作进程。
为真,这意味着选择
工作进程
执行要在实际执行开始之前完成。对于调度器(分布式系统)来说,这似乎不太合适,它应该在跨
工作者调度任务之前动态地考虑负载因素