所以我一直试图弄清楚如何进行预定任务,我找到了Celery,并且能够完成简单的预定任务。为此,我需要打开一个命令行并运行celery -A proj beat
来完成任务。这在开发环境中工作正常,但是当将其投入生产时将是一个问题。
那么如何在没有使用命令行的情况下让芹菜工作?当我的生产服务器在线时,如何确保我的调度程序能够满足它?芹菜可以做到这一点,还是我需要采用另一种方法?
答案 0 :(得分:3)
我们在生产环境中使用Celery,恰好在Heroku上。我们正在迁移到AWS。在这两种环境中,Celery都很好地哼着。
了解您的生产环境将会是什么样子会很有帮助。我有点担心为什么你会担心关掉你的电脑,因为使用Django意味着你正在运行一个网站服务......你是从笔记本电脑上为你的网站服务吗?
无论如何,假设您要从云平台运行生产服务器,您所要做的就是发送运行Django所需的任何命令行和Celery的命令行(正如您在问题中已经注意到的那样) )。
在配置方面,您说您有“预定”任务,这意味着您已在config.py文件中设置了节拍时间表。如果没有,它应该看起来像这样(假设你有一个名为tasks.py的模块,它保存你的芹菜任务定义:
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示例。
总结:
希望有所帮助。