首页 > 解决方案 > 启动 celery .delay 后 Django 冻结。怎么修?

问题描述

运行简单的任务来打印字符串,它冻结总没有任何错误,一切都安装好了。

celery 启动,redis 工作,当它运行延迟 celery 应用程序时没有打印。

但在 django runserver 中打印一次“2,2”

芹菜.py

from __future__ import absolute_import
import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'src.settings.local')
    
from django.conf import settings
from celery import Celery

app = Celery('src')
    
app.config_from_object('django.conf:settings')
    
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    
@app.task(bind=True)
def debug_task(self):
    print("Request: {0!r}".format(self.request))

我的任务.py

import os
import datetime
from celery import Celery
from celery import shared_task
@shared_task
def testfunc():
    print('EKHASGBDJHGASd')
    return False

我在视图中启动该功能

testfunc.delay()

Celery worker 找到了所有的任务,但是当启动一些任务时,所有的任务都是冻结的,并且没有任何错误,celery worker 是相当的。

标签: djangocelery

解决方案


我有同样的问题,也许我的解决方案也适合你。我发现我的问题出在我的项目settings.py中。首先确保你在你的 celery 变量中正确定义settings.py

CELERY_BROKER_URL = 'amqp://{}:{}@{}'.format(
    CELERY_BROKER_USER,
    CELERY_BROKER_PASS,
    CELERY_BORKER_HOST
)

如果此变量 ( CELERY_BROKER_URL) 定义正确,那么我认为您的问题是您的问题CELERY_BORKER_HOST,如果您以错误的方式定义它(例如:CELERY_BROKER_HOST = "localhost:5673/"而不是CELERY_BROKER_HOST = "localhost:5672/"rabbitmq),那么无论何时调用.delay()它都会冻结。


推荐阅读