【问题标题】:Django celery and rabbitmq doesn't work until restartDjango celery 和 rabbitmq 直到重新启动才能工作
【发布时间】:2018-02-22 04:56:51
【问题描述】:

我对 django、celery 和 rabbitmq 有疑问。

我使用 celery 向 FCM 设备发送消息,但问题是 celery 不会运行该 FCM 命令来发送消息,直到我重新启动 celery 服务器。

当我重新启动 celery 时,再试一次,还是一样,每次操作后我都需要重新启动它。

示例代码:

from __future__ import absolute_import, unicode_literals

from celery import shared_task
# firebase cloud messaging
from fcm.utils import get_device_model
Device = get_device_model()


@shared_task
def send_firebase_message(json, **kwargs):
    response = Device.send_msg(json, **kwargs)
    return response

这是简单的代码,所以 Device.send_msg 在我重新启动 celery 服务器之前不会触发。 所以,芹菜在我重新启动之前不会执行此任务。可能是rabbitmq问题?

有人对此有任何解决方案吗?可能是什么问题?

【问题讨论】:

  • 听起来您每次使用后都需要清洁 Celery。试试这样的:$celery purge
  • 但是,如果我需要为每个动作都这样做,那就不好了?
  • 怀疑。我在所有项目中都调用垃圾收集。特别是当我使用组件时。否则,事情会卡在 RAM 中,造成内存泄漏,或者像您的情况一样,阻塞进程。即使这不是问题,它也是一个很好的做法

标签: python django rabbitmq celery django-celery


【解决方案1】:

--autoreload 自 3.1 起不工作,改为非阻塞 inotify 需要l

如果您想了解更多信息,请参阅文档deprecated

我们有另一种选择,请参考这篇文章auto reload。它似乎适用于我当前的项目

【讨论】:

  • 但是我的自动重载没有问题,celery 在我重新启动服务器之前无法工作,我不更改代码,只需将任务添加到 celery,直到重新启动它才会触发。跨度>
猜你喜欢
  • 2011-07-17
  • 2014-05-23
  • 2015-01-01
  • 2017-10-24
  • 1970-01-01
  • 2011-07-24
  • 2011-07-18
  • 1970-01-01
  • 2021-10-15
相关资源
最近更新 更多