Django 芹菜不';调用apply\u async时,不会返回或失败。配芹菜酱

Django 芹菜不';调用apply\u async时,不会返回或失败。配芹菜酱,django,rabbitmq,celery,amqp,Django,Rabbitmq,Celery,Amqp,使用apply\u async调用芹菜任务时遇到问题。 我在settings.py中有: CELERY_BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True} CELERY_BROKER_URL = env('RABBITMQ_URL') print(CELERY_BROKER_URL) //pyamqp://un:pw@app-rabbitmq:5672 CELERY_TASK_QUEUES = ( Queue('default', E

使用apply\u async调用芹菜任务时遇到问题。 我在settings.py中有:

CELERY_BROKER_TRANSPORT_OPTIONS = {'confirm_publish': True}
CELERY_BROKER_URL = env('RABBITMQ_URL')
print(CELERY_BROKER_URL) //pyamqp://un:pw@app-rabbitmq:5672
CELERY_TASK_QUEUES = (
    Queue('default', Exchange('default', type='direct'), routing_key='default'),
    Queue('email', Exchange('email', type='direct'), routing_key='email'),
)
CELERY_TASK_ROUTES = {
    'core.services.CoreSendEmailTaskService.*': {
        'exchange': 'email',
        'routing_key': 'email'
    },
}
CELERY_ACCEPT_CONTENT = ['json']

CELERY_TASK_DEFAULT_QUEUE = 'default'
CELERY_TASK_ACKS_LATE = True
CELERY_TASK_SERIALIZER = 'json'

CELERY_RESULT_EXPIRES = 600
CELERY_RESULT_SERIALIZER = 'json'
CELERY_RESULT_BACKEND = env('CELERY_RESULT_BACKEND_URL') //redis://app-redis:6379/3
CELERY_RESULT_PERSISTENT = False

CELERY_WORKER_TASK_TIME_LIMIT = 65
CELERY_WORKER_TASK_SOFT_TIME_LIMIT = 60
CELERY_WORKER_HIJACK_ROOT_LOGGER = False
在project\u config/cellery\u config/tasks/\uuuuu init\uuuuuu.py中:

from __future__ import absolute_import, unicode_literals

# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app

__all__ = ('app',)
在project_config/celery_config/tasks/celery.py中:

class CeleryApp(celery.Celery):
    def on_configure(self):
        sentry_dns = os.environ.get('DJANGO_SENTRY_DNS', None)

        if sentry_dns and os.environ.get('ENVIRONMENT', 'local') == 'production':
            client = raven.Client(
                sentry_dns
            )

            register_logger_signal(client)
            register_signal(client)


app = CeleryApp('tasks')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()


class CeleryTasksConfig(AppConfig):
    name = 'project_config.celery_config.tasks'
    verbose_name = 'Celery Tasks'

    def ready(self):
        app.config_from_object('django.conf:settings', namespace='CELERY')
        app.autodiscover_tasks()

奇怪的是,任务在登台和生产上执行,但在本地却没有。在使用beat进行计划时,任务也会在本地正常运行

工作进程通过以下命令在本地启动:
芹菜-A project\u config.芹菜\u config.tasks worker-O fair--loglevel=DEBUG--maxstasksperchild=1000--queues=default,email-P prefork

首先,我看到您的设置中有一个输入错误:“ELERY\u ACCEPT\u CONTENT”,可能与您的问题无关。第二,我在这里没有看到任何异常的细节,也没有看到任何可以解释你所面临问题的细节。(除了将芹菜.py作为一项任务加入之外,我会将其提升一个级别)。我们可能需要更多的信息。另外,在登台运行时,环境的价值是什么?您如何在本地系统上启动芹菜?@BillHuneke是的,这是一个复制粘贴错误,我编辑了帖子,ty@2ps芹菜从本地开始:
芹菜-A project\u config.芹菜\u config.tasks worker-O fair--loglevel=DEBUG--maxstasksperchild=1000--queues=default,email,kraken-P prefork
和在登台/生产时使用:
芹菜-一个项目\u config.芹菜\u config.tasks worker-O fair--loglevel=INFO--maxstasksperchild=1000--concurrency=4--queues=default,email-P prefork
@BillHuneke环境的价值在于登台和生产时登台