在芹菜3.1中,使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

Django的情况变化太大,所以我不能使用3.1。我需要一些帮助

我读了,读了文件。但我不知道如何在django中进行定期任务。我想这是因为我英语水平低

在旧版本的芹菜中,我导入了djCellery和crontab,并在settings.py中设置了CELERYBEAT_SCHEDULE,并由manage.py执行

但似乎我再也不能用那种方式执行芹菜执事了。我应该把芹菜放在哪里?在文档中的django示例中,它们设置
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)
    },
}