请求中的 Django celery .delay() 卡住了

Django celery .delay() in requests get stucked

我有一个项目 运行 在 3 个不同的环境中运行,在 2 个环境中它在生产环境中由于某种原因停止工作(之前工作)。

代码非常简单我有一个观点,其中 运行 是一项延迟任务,应该 return 立即向用户发送一些消息:

class PrintTaskView(View):
    def get(self, request):
        logger.debug('ABOUT TO ADD A TASK')
        tasks.print_task.delay()
        logger.debug('TASK WAS ADDED')
        messages.info(request, _('Print task added to queue'))
        return HttpResponseRedirect(reverse_lazy('admin:index'))

我很困惑,因为这在我的本地机器和测试环境上运行顺利,而在生产请求上,在执行第一个日志后卡在加载上。 更令人困惑的是,如果我 运行 来自 shell (manage.py shell) 的代码,那么打印任务将被创建并由工作人员获取并执行。芹菜也顺利完成任务 运行s。

我的芹菜设置:

# Celery
CELERY_BROKER_URL = os.getenv('CELERY_BROKER_URL')
CELERY_RESULT_BACKEND = os.getenv('CELERY_RESULT_BACKEND')
CELERY_BEAT_SCHEDULE = {
    ...
}

website/__init__.py

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ('celery_app',)

celery.py

from __future__ import absolute_import

from celery import Celery
from django.conf import settings

app = Celery('somename')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS, related_name='tasks')

非常欢迎任何想法或建议:)

我实际上是偶然发现在 celery 库或附近某处与 Redis 的连接中存在错误,并且在访问 Redis 时如果凭据错误,您实际上不会返回任何错误。服务器上有人删除了凭据 env 变量,因此 App 无法连接到 Redis,并且没有返回任何错误。在虚拟环境中,我可以连接它们,那里的一切都运行很顺利。

如果您遇到同样的问题,请注意确保正确设置了访问 Redis 的凭据。