【问题标题】:Celery task.delay blocked in docker container芹菜 task.delay 在 docker 容器中被阻塞
【发布时间】:2018-04-05 02:32:09
【问题描述】:

我在我的 django 项目中使用 celery。它在我的 MacBook 和 CentOS VM 上运行良好。当我在 docker 容器中运行它时,包含 add.delay(add 是一个任务) 方法的请求总是被阻止。

我在github上创建了一个demo项目:https://github.com/fengyouchao/proj_test

我的任务:

@shared_task
def add(x, y):
    return x + y

我的看法:

def index(request):
    a = int(request.GET.get('a', 1))
    b = int(request.GET.get('b', 2))
    add.delay(a, b)
    return HttpResponse("Hello world")


def hello(request):
    return HttpResponse("hello")

在演示项目中,我在 docker-compose.yml 中创建了三个服务:

  1. web - 运行“manage.py runserver 0.0.0.0:8000”的服务
  2. celery - 运行“celery”的服务
  3. rabbitmq - 运行 rabbitmq-server 的服务

运行服务

docker-compose up

测试

curl localhost:8000 # blocked

curl localhost:8000/hello # OK

在当前系统中运行django项目(在docker容器中使用相同的rabbitmq-server)

manage.py runserver 0.0.0.0:18000

测试

curl localhost:18000 # OK , and the "celery" service printed task logs

这个问题困扰了我很久,不知道问题出在哪里。我希望有一个人可以帮助我。谢谢!

【问题讨论】:

  • “被阻止”是什么意思?你能附上相关的日志吗?工人成功连接到rabbitmq?你没有错过 Celery 初始化中的包含参数吗? (带有任务文件)
  • "blocked" 表示网络服务器没有响应。 Worker 已经成功连接到rabbitmq。我不认为我错过了 Celery 初始化中的包含参数。只有在 docker 中启动 web 时才会出现此问题。
  • 您可以查看我对另一个 SO 问题的回答,它可能会对您有所帮助:stackoverflow.com/questions/45863053/…

标签: django docker rabbitmq celery


【解决方案1】:

我刚刚遇到了类似的问题,

我使用 rabbitmq 容器作为代理,所以在settings.py 中添加了 CELERY_BROKER_URL

当我在manage.py django shell 中运行 add.delay() 时,它在容器内被击中,但在生产中运行良好

所以我添加了以下更改,它开始工作了

app = Celery('app', broker="amqp://rabbitmq")

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,并通过在我的proj/proj/__init__.py 中导入在proj/proj/celery.py 创建的应用程序来解决,如下所示:

    from __future__ import absolute_import, unicode_literals
    
    # This will make sure the app is always imported when
    # Django starts so that shared_task will use this app.
    from .celery import app as celery_app
    
    __all__ = ('celery_app',)
    

    您可以在 Celery 的 first steps with django 文档中查看更多信息。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2016-05-10
      • 2021-05-08
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 2022-01-27
      • 1970-01-01
      • 2016-12-26
      相关资源
      最近更新 更多