【发布时间】:2015-10-19 03:02:18
【问题描述】:
我有一个设置,其中 celery_result_backend 已配置为“amqp”。我可以在日志中看到我的任务被工作人员执行。但 它正在使用任务 ID 创建队列,但其状态已过期。我没有得到结果(result = AsyncResult(taskid); result.get() 挂起)。我尝试了所有支持的支持: 1)Mysql:它没有将数据放入芹菜创建的表中 2)Redis:它没有把数据放到数据库中
我有两个centos系统。 1)我正在调用延迟方法将任务发送到正确的rabbitmq。并且工作人员正在监听队列,从那里它将选择任务和进程(我可以看到队列中的任务并被机器2中的工作人员执行但结果没有被放入后端。 ).这里我在做 result.get() 它挂了。
2)工作人员正在其上运行以执行任务。它执行任务但我认为无法放置结果
设置:
RABBITMQ_BROKER_HOST = '10.213.166.133'
RABBITMQ_BROKER_PORT = dqms_settings.RABBITMQ_BROKER_PORT
RABBITMQ_BROKER_VHOST = dqms_settings.RABBITMQ_BROKER_VHOST
RABBITMQ_BROKER_USERNAME = dqms_settings.RABBITMQ_BROKER_USERNAME
RABBITMQ_BROKER_PASSWORD = dqms_settings.RABBITMQ_BROKER_PASSWORD
BROKER_URL = 'amqp://%s:%s@%s:%s/%s' % (RABBITMQ_BROKER_USERNAME,
RABBITMQ_BROKER_PASSWORD,
RABBITMQ_BROKER_HOST,
RABBITMQ_BROKER_PORT,
RABBITMQ_BROKER_VHOST)
#CELERY_TASK_RESULT_EXPIRES = 18000
#CELERY_IGNORE_RESULT = True
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
#CELERY_RESULT_BACKEND = 'db+mysql://svcacct-dqms:s3cretP@ssw0rd@10.213.166.202:3306/dqms'
#CELERY_RESULT_BACKEND = 'amqp'
#CELERY_AMQP_TASK_RESULT_EXPIRES = 1000
#CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = TIME_ZONE
CELERYD_PREFETCH_MULTIPLIER = dqms_settings.CELERYD_PREFETCH_MULTIPLIER
CELERY_DEFAULT_QUEUE = dqms_settings.CELERY_DEFAULT_QUEUE
CELERY_DEFAULT_EXCHANGE_TYPE = dqms_settings.CELERY_DEFAULT_EXCHANGE_TYPE
CELERY_DEFAULT_ROUTING_KEY = dqms_settings.CELERY_DEFAULT_ROUTING_KEY
CELERY_QUEUES = dqms_settings.CELERY_QUEUES
CELERY_ROUTES = dqms_settings.CELERY_ROUTES
CELERYD_HIJACK_ROOT_LOGGER = dqms_settings.CELERYD_HIJACK_ROOT_LOGGER
CELERY_ACKS_LATE = dqms_settings.CELERY_ACKS_LATE
CELERY_RESULT_BACKEND = 'redis://:s3cretP@ssw0rd@10.213.166.204:6379/5' #'djcelery.backends.database.DatabaseBackend'
#CELERY_REDIS_MAX_CONNECTIONS = 6
#CELERY_ALWAYS_EAGER = False
有人可以帮忙解释为什么它没有将结果放入队列中吗?
【问题讨论】:
-
"redis://:s3cretP@ssw0rd@10.213.166.204"...我会从不带“@”(或转义)的密码开始
-
转义会出错...我的密码现在是“s3cretP@ssw0rd”@localhost/db。我在这里做错了吗
-
带有“@”的密码通常是个坏主意。当 URL 被解释时,@ 之后的任何内容都将成为目标软管,因此在您的情况下,主机现在变为“ssw0rd@10.213.166.202”
-
这可能是 redis 和 mysql 的问题,但对于 celery_result_backend='amqp' 将过期消息放入队列?为什么会出现这种行为。