请求中的 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 的凭据。
我有一个项目 运行 在 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 的凭据。