Heroku上Celery RabbitMQ CloudAMQP任务队列未被消费
这个例子在开发环境下是可以正常工作的。但是在Heroku上,任务被排队了,但没有被处理。你觉得我可能哪里做错了呢?
RabbitMQ仪表板显示:
名称 参数 策略 状态 准备 未确认 总数
1f49ea51a56049f7a68082c6297ea080 Exp D AD HA 空闲 1 0 1 253eb525c95944d2b742f1f112cdc0e5 Exp D AD HA 空闲 1 0 1
Proc文件
web: gunicorn hellodjango.wsgi --workers 1
celery: python manage.py celery worker -E --time-limit=1200 --loglevel=ERROR
设置.py
from os import environ
CELERY_RESULT_BACKEND = "amqp"
BROKER_POOL_LIMIT = 0
BROKER_URL = environ.get('CLOUDAMQP_URL', '')
CELERY_TASK_RESULT_EXPIRES = 14400
视图
from django.shortcuts import render
from django.http import HttpResponse
from proj.tasks import add_to_count
from models import SampleCount
import logging
def test_async(request):
sc = add_to_count.delay()
count = SampleCount.objects.all()[0].num
return HttpResponse("test count: %s sc: %s name: %s " %(count,sc,add_to_count.name ))
模型
from django.db import models
# Create your models here.
class SampleCount(models.Model):
num = models.IntegerField(default=0)
任务.py
from __future__ import absolute_import
from celery import shared_task
from proj.models import SampleCount
from celery import task
@task(name='proj.tasks')
def add_to_count():
try:
sc = SampleCount.objects.get(pk=1)
except:
sc = SampleCount()
sc.num = sc.num + 2
sc.save()
return(sc)
2 个回答
0
限制你的celery工作进程的并发数,可以使用 -c 1
这个参数。
1
我也遇到了同样的问题,我觉得这可能跟命名有关。在你的procfile里,你用了manage.py,而Heroku推荐的写法是这样的:
worker: celery worker --app=tasks.app