在芹菜3.1中,使django成为周期性任务
Django的情况变化太大,所以我不能使用3.1。我需要一些帮助 我读了,读了文件。但我不知道如何在django中进行定期任务。我想这是因为我英语水平低 在旧版本的芹菜中,我导入了djCellery和crontab,并在settings.py中设置了CELERYBEAT_SCHEDULE,并由manage.py执行 但似乎我再也不能用那种方式执行芹菜执事了。我应该把芹菜放在哪里?在文档中的django示例中,它们设置在芹菜3.1中,使django成为周期性任务,django,celery,celerybeat,Django,Celery,Celerybeat,Django的情况变化太大,所以我不能使用3.1。我需要一些帮助 我读了,读了文件。但我不知道如何在django中进行定期任务。我想这是因为我英语水平低 在旧版本的芹菜中,我导入了djCellery和crontab,并在settings.py中设置了CELERYBEAT_SCHEDULE,并由manage.py执行 但似乎我再也不能用那种方式执行芹菜执事了。我应该把芹菜放在哪里?在文档中的django示例中,它们设置os.environ.setdefault('django\u SETTINGS
os.environ.setdefault('django\u SETTINGS\u MODULE','proj.SETTINGS')
在proj/proj/芹菜中。(1) 那么在settings.py中设置celerybeat(像以前一样)可以吗
(2) 如果可以,用django制作定期任务的一个小例子将非常有用。当我阅读教程时,最令人困惑的部分是文件路径。如果你不想提供一个完整的例子,如果你能解释一下我应该在哪里做任务、设置节拍和执行执事,我会非常感激
谢谢阅读。我想您已经阅读了文档中的内容,但是您看到了吗 它不使用计划程序,但如果将其添加到
settings.py
:
from __future__ import absolute_import
from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
# crontab(hour=0, minute=0, day_of_week='saturday')
'schedule-name': { # example: 'file-backup'
'task': 'some_django_app.tasks....', # example: 'files.tasks.cleanup'
'schedule': crontab(...)
},
}
# if you want to place the schedule file relative to your project or something:
CELERYBEAT_SCHEDULE_FILENAME = "some/path/and/filename"
现在,对于命令,请忘记manage.py
,只需直接键入芹菜即可:
-B
一如既往地启用芹菜节拍
-A
指定芹菜应用程序的名称。请注意示例项目中的这一行:app=芹菜('proj')
“django芹菜”不是必需的,仅在需要管理时安装
来自管理员的计划,或者如果要将任务结果存储在数据库中
通过django的ORM:
INSTALLED_APPS += ('djcelery',)
# store schedule in the DB:
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'
您可以使用django芹菜应用程序:
安装:
pip install django-celery
要为您的项目启用django芹菜,您需要将django芹菜添加到已安装的应用程序中:
INSTALLED_APPS += ("djcelery", )
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"
然后将以下行添加到settings.py:
import djcelery
djcelery.setup_loader()
用法
在linux上,您可以使用芹菜节拍运行worker,如下所示:
python manage.py celeryd worker --loglevel=DEBUG -E -B -c 1
python manage.py help celeryd #to find out the args meaning
此外,您还希望在django admin中监视任务。要启用监控设备,您需要运行celerycam:
python /var/www/gorod/manage.py celerycam
要进行定期任务,可以使用芹菜.decorators.periodic_任务
# myapp/tasks.py
import datetime
import celery
@celery.decorators.periodic_task(run_every=datetime.timedelta(minutes=5))
def myfunc():
print 'periodic_task'
或使用
# settings.py
CELERYBEAT_SCHEDULE = {
'add-every-30-seconds': {
'task': 'tasks.add',
'schedule': timedelta(seconds=30),
'args': (16, 16)
},
}
来自芹菜.schedules导入crontab
这行告诉我错误:“没有名为schedules的模块”@JonCrowell刚刚检查过,导入是正确的。您的设置中一定有问题。您是否从_ufuture\u uu import absolute\u import
添加了设置文件?如果没有,python将尝试从芹菜.py文件导入计划。直接从芹菜文档导入“”“您也可以通过启用workers-B选项开始在worker中嵌入beat,如果您永远不会运行多个worker节点,这会很方便,但它并不常用,因此不建议在生产中使用:$celery-A proj worker-B”“”注意-现在需要称为celery\u beat\u SCHEDULE(最新版本)芹菜3.1中不推荐使用@periodic_任务
装饰器。
# settings.py
CELERYBEAT_SCHEDULE = {
'add-every-30-seconds': {
'task': 'tasks.add',
'schedule': timedelta(seconds=30),
'args': (16, 16)
},
}