Django-celery和RabbitMQ不执行任务

sw00

我们已经有了带有django-celery 2.5.5Django 1.3应用程序,应用程序在生产中已经可以运行一个月了,但是所有突然出现的celery任务之一现在都无法执行。

RabbitMQ代理和Celery工作者在单独的计算机上运行,​​并且celeryconfig.py配置为使用该特定RabbitMQ实例作为后端。

在应用程序服务器上,我尝试通过手动启动celery任务python manage.py shell

实际任务的调用方式如下:

>>> result = tasks.runCodeGeneration.delay(code_generation, None)
>>> result
<AsyncResult: 853daa7b-8be5-4a25-a1d0-1552b38a0d21>
>>> result.state
'PENDING'

它返回AsyncResult预期的结果,但其状态永远不变'PENDING'

为了查看RabbitMQ代理是否收到消息,我运行了以下命令:

$ rabbitmqctl list_queues name messages messages_ready messages_unacknowledged | grep 853daa
853daa7b8be54a25a1d01552b38a0d21        0       0       0

我不确定这意味着什么,RabbitMQ当然似乎收到某种请求,否则如何为ID为853daa7b8be54a25a1d01552b38a0d21的任务创建队列。它似乎没有任何消息吗?

我尝试重新启动Celery和RabbitMQ,问题仍然存在。

芹菜的运行方式如下: $ python /home/[project]/console/manage.py celeryd -B -c2 --loglevel=INFO

请注意,celerybeat /计划任务似乎运行良好。

[编辑]:没有init.d脚本内联的RabbitMQ配置: /usr/lib/erlang/erts-5.8.5/bin/beam.smp -W w -K true -A30 -P 1048576 -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -noshell -noinput -sname rabbit@hostname -boot /var/lib/rabbitmq/mnesia/rabbit@hostname-plugins-expand/rabbit -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/log/rabbitmq/[email protected]"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/[email protected]"} -os_mon start_cpu_sup true -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@hostname"

[EDIT2]:这是我们用于工作人员的celeryconfig。生产者使用相同的配置,除了将localhost更改为上面带有RabbitMQ代理的框。

from datetime import timedelta

BROKER_HOST = "localhost"

BROKER_PORT = 5672
BROKER_USER = "console"
BROKER_PASSWORD = "console"

BROKER_VHOST = "console"
BROKER_URL = "amqp://guest:guest@localhost:5672//"

CELERY_RESULT_BACKEND = "amqp"

CELERY_IMPORTS = ("tasks", )

CELERYD_HIJACK_ROOT_LOGGER = True
CELERYD_LOG_FORMAT = "[%(asctime)s: %(levelname)s/%(processName)s/%(name)s] %(message)s"


CELERYBEAT_SCHEDULE = {
    "runs-every-60-seconds": {
        "task": "tasks.runMapReduceQueries",
        "schedule": timedelta(seconds=60),
        "args": ()
    },
}

[EDIT3]:我们的基础架构如下图2所示: 芹菜工人/经纪人和django-celery的应用

sw00

我们解决了这个问题。

有一个长期运行的celerybeat任务(〜430s)被安排为每60秒运行一次。这把所有工人排成一排。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过Celery在Django中异步执行任务的正确方法

来自分类Dev

Django 和 Celery 任务

来自分类Dev

Celery / RabbitMQ / Django未运行任务

来自分类Dev

Django,RabbitMQ和Celery-在更新开发中的Django代码后,为什么Celery运行旧版本的任务?

来自分类Dev

使用 Django、celery 和 Redis 安排任务

来自分类Dev

Django,Celery,Redis,RabbitMQ:写入扇出的链接任务

来自分类Dev

无法让 Celery/RabbitMQ 在 Django 中运行我的共享任务

来自分类Dev

使用RabbitMQ的Django Celery

来自分类Dev

Django Celery任务记录

来自分类Dev

Celery Beat调度程序无法在Django中执行我的任务

来自分类Dev

Celery在使用Django数据库执行之前撤销任务

来自分类Dev

创建任务列表,不执行任务

来自分类Dev

创建任务列表,不执行任务

来自分类Dev

Ajax队列不执行任务

来自分类Dev

Swift 3.0:不执行任务块

来自分类Dev

Gearman和inotify用于执行任务

来自分类Dev

Gearman和inotify用于执行任务

来自分类Dev

如何从队列上同时配置celery执行任务

来自分类Dev

Celery 3.1-异步执行任务链

来自分类Dev

Django 中带有 Redis 代理的 Celery:任务成功执行,但仍然存在太多持久性 Redis 键和连接

来自分类Dev

在Django Celery中,我如何判断任务是否已异步执行

来自分类Dev

如何在不阻塞 Django 的情况下安排 celery 任务

来自分类Dev

我们可以使用 django canvas 来运行 2 个组并行任务来执行 celery 任务吗

来自分类Dev

Django / Python中的Celery任务最佳做法

来自分类Dev

没有Celery的Django中的预定任务?

来自分类Dev

通过名称调用Django celery任务

来自分类Dev

Django中的Celery任务总是阻塞

来自分类Dev

Django 1.9 + Celery未注册任务

来自分类Dev

Django / Python中的Celery任务最佳做法

Related 相关文章

  1. 1

    通过Celery在Django中异步执行任务的正确方法

  2. 2

    Django 和 Celery 任务

  3. 3

    Celery / RabbitMQ / Django未运行任务

  4. 4

    Django,RabbitMQ和Celery-在更新开发中的Django代码后,为什么Celery运行旧版本的任务?

  5. 5

    使用 Django、celery 和 Redis 安排任务

  6. 6

    Django,Celery,Redis,RabbitMQ:写入扇出的链接任务

  7. 7

    无法让 Celery/RabbitMQ 在 Django 中运行我的共享任务

  8. 8

    使用RabbitMQ的Django Celery

  9. 9

    Django Celery任务记录

  10. 10

    Celery Beat调度程序无法在Django中执行我的任务

  11. 11

    Celery在使用Django数据库执行之前撤销任务

  12. 12

    创建任务列表,不执行任务

  13. 13

    创建任务列表,不执行任务

  14. 14

    Ajax队列不执行任务

  15. 15

    Swift 3.0:不执行任务块

  16. 16

    Gearman和inotify用于执行任务

  17. 17

    Gearman和inotify用于执行任务

  18. 18

    如何从队列上同时配置celery执行任务

  19. 19

    Celery 3.1-异步执行任务链

  20. 20

    Django 中带有 Redis 代理的 Celery:任务成功执行,但仍然存在太多持久性 Redis 键和连接

  21. 21

    在Django Celery中,我如何判断任务是否已异步执行

  22. 22

    如何在不阻塞 Django 的情况下安排 celery 任务

  23. 23

    我们可以使用 django canvas 来运行 2 个组并行任务来执行 celery 任务吗

  24. 24

    Django / Python中的Celery任务最佳做法

  25. 25

    没有Celery的Django中的预定任务?

  26. 26

    通过名称调用Django celery任务

  27. 27

    Django中的Celery任务总是阻塞

  28. 28

    Django 1.9 + Celery未注册任务

  29. 29

    Django / Python中的Celery任务最佳做法

热门标签

归档