我在Django项目中使用 celery 。它在我的MacBook和CentOS VM上运行良好。当我在docker容器中运行它时,包含add.delay
(add
是一个任务)方法的请求始终被阻止。
我在github上创建了一个演示项目: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中创建了三个服务:
运行服务
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容器用作代理,因此在settings.py
中添加了CELERY_BROKER_URL
当我在manage.py
django shell中运行add.delay()时,它在容器内被击中,但在生产中运行良好
所以我添加了以下更改,它开始起作用
app = Celery('app', broker="amqp://rabbitmq")
关于django - Celery task.delay在docker容器中被阻止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46908063/