【问题标题】:Django-Celery in production?生产中的 Django-Celery?
【发布时间】:2017-07-02 07:37:18
【问题描述】:

所以我一直在尝试弄清楚如何制定计划任务,我找到了 Celery 并能够制定简单的计划任务。为此,我需要打开命令行并运行celery -A proj beat 以使任务发生。这在开发环境中运行良好,但在将其投入生产时就会出现问题。

那么如何在不使用命令行的情况下让 celery 工作呢?当我的生产服务器在线时,我如何确保我的调度程序能够正常运行? Celery 可以做到这一点还是我需要另一种方法?

【问题讨论】:

  • 您预计生产中会出现什么问题?
  • 即使服务器在另一台计算机上,如果没有我的计算机,我将无法运行 celery。
  • 您可以随时对其进行守护。看看这个,docs.celeryproject.org/en/latest/userguide/daemonizing.html
  • 这对于 Windows 64 位是否可行?
  • 我提供的链接只有 linux 系统的脚本。检查这个链接mrtn.me/blog/2012/07/04/…(它已经过时但应该给你一些想法)

标签: django celery django-celery


【解决方案1】:

我们在生产环境中使用 Celery,恰好在 Heroku 上。我们正在迁移到 AWS。在这两种环境中,Celery 都能很好地哼唱。

了解您的生产环境会是什么样子会很有帮助。我有点困惑为什么你会担心关闭你的电脑,因为使用 Django 意味着你正在运行一个网站......你是从你的笔记本电脑上为你的网站提供服务吗??

无论如何,假设您要从云平台运行生产服务器,您所要做的就是发送运行 Django 所需的任何命令行和 Celery 的命令行(正如您在问题中已经指出的那样)。

在配置方面,您说您有“计划”任务,这意味着您已经在 config.py 文件中设置了节拍计划。如果不是,它应该看起来像这样(假设您有一个名为 tasks.py 的模块,其中包含您的 celery 任务定义:

from celery.schedules import crontab

beat_schedule = {
    'task1': {
        'task': 'tasks.task_one',
        'schedule': 3600
    },
    'task2': {
        'task': 'tibController.tasks.update_old_retail',
        'schedule': crontab(hour=12, minute=0, day_of_week='mon-fri'
    }
}

然后在你的tasks.py中调用你刚才做的配置文件:

from celery import Celery
import config

app = Celery('tasks')
app.config_from_object(config)

您可以在docs 中找到有关 crontab 的更多信息。您还可以查看此repo 以获得一个简单的 Celery 示例。

总结:

  1. 创建一个配置文件,用于标识何时运行哪些任务
  2. 将配置文件加载到您的 Celery 应用中
  3. 获取一个云平台来运行您的代码。
  4. 完全按照您已经确定的方式运行 celery

希望对您有所帮助。

【讨论】:

  • 所以基本上设置它不需要在终端上输入celery -A proj beat 吗?
  • 是的,您仍然希望运行 beat 命令,以便 Celery 知道启动它。这是我开始芹菜的方法:celery -A task_module.tasks worker --loglevel=info --beat .
猜你喜欢
  • 1970-01-01
  • 2020-11-16
  • 2011-03-20
  • 2021-03-12
  • 2012-08-28
  • 2011-04-22
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
相关资源
最近更新 更多