Rabbitmq 芹菜排队悬挂

Rabbitmq 芹菜排队悬挂,rabbitmq,celery,Rabbitmq,Celery,我有一份特别的工作,似乎经常吊着芹菜工人。我使用rabbitmq作为代理。我尝试了几种方法来解决这个问题,但都没有成功: 自动调整工作人员的比例,以便让挂起的工作人员有足够的时间完成执行 设置全局超时 因此,我对造成这个问题的原因以及如何解决这个问题略知一二。有人能给我指点吗?所讨论的任务只是将一条记录插入数据库(本例中为MongoDB) 更新:我已经添加了。我们看看这是否能解决问题。 更新2:不 使子进程挂起的特定作业通常是IO永远无法完成的症状,例如web请求或套接字读取没有超时 大多数

我有一份特别的工作,似乎经常吊着芹菜工人。我使用rabbitmq作为代理。我尝试了几种方法来解决这个问题,但都没有成功:

  • 自动调整工作人员的比例,以便让挂起的工作人员有足够的时间完成执行
  • 设置全局超时
因此,我对造成这个问题的原因以及如何解决这个问题略知一二。有人能给我指点吗?所讨论的任务只是将一条记录插入数据库(本例中为MongoDB)

更新:我已经添加了。我们看看这是否能解决问题。
更新2:不

使子进程挂起的特定作业通常是IO永远无法完成的症状,例如web请求或套接字读取没有超时

大多数库都支持设置超时,但如果不支持,则始终可以使用
socket.setdefaulttimeout

import socket

@task
def http_get(url, timeout=1.0, retry_after=3.0, max_retries=None):
    prev_timeout = socket.getdefaulttimeout()
    socket.setdefaulttimeout(timeout)
    try:
        return requests.get(url)
    except socket.timeout:
        raise http_get.retry(exc=exc, countdown=retry_after, max_retries=max_retries)
    finally:
        socket.setdefaulttimeout(prev_timeout)

您很可能遇到芹菜/Kombu(请参阅)中的无限循环错误,该错误最近才得到修复。它还没有发布。有关详细信息,请参阅提交。如果您无法在安装中使用repo构建,解决方法是现在切换到Redis或设置
芹菜\u WORKER\u PREFETCH\u乘数=0
-P solo