Django 芹菜不';调用apply\u async时,不会返回或失败。配芹菜酱
使用apply\u async调用芹菜任务时遇到问题。 我在settings.py中有: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
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环境的价值在于登台和生产时登台