在芹菜3.1中,制作django的周期性任务



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

我在django中阅读了关于制作任务的内容,并阅读了Periodic Tasks文档。但我不知道如何在django中制作定期任务。我想这是因为我的英语水平低。。

在旧版本的Celery中,我导入了djceleb&crontab,并在设置.py中设置CELERYBEAT_SCHEDULE,并由管理.py.执行

但我似乎再也不能用那种方式执行芹菜指令了。比我应该把CELERYBEAT_SCHEDULE放在哪里?在文档中的django示例中,他们设置了os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')proj/proj/celene.py中。(1)所以在设置中设置celeybeat。py(像以前一样)可以吗?

(2) 如果可以的话,用django做一个周期性任务的小例子会很有帮助。当我阅读教程时,最令人困惑的部分是文件路径。如果你不想提供一个完整的例子,如果你能解释一下我应该在哪里制作任务、设置节拍和执行deamon,我将不胜感激。

感谢阅读。

我想您已经阅读了文档中的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,直接键入celery即可:

-B使芹菜能够一如既往地跳动。

-A指定芹菜应用程序的名称。请注意示例项目的celery.py中的这一行:app = Celery('proj')

celery -A proj worker -B -l info

不需要'django-celeb',只有在需要管理时才安装它来自管理员的计划,或者如果您想将任务结果存储在数据库中通过django的ORM:

INSTALLED_APPS += ('djcelery',)
# store schedule in the DB:
CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler'

您可以使用django-celeron应用程序:https://pypi.python.org/pypi/django-celery

安装

pip install django-celery

要为您的项目启用django-celerie,您需要将djcelerie添加到INSTALLED_APPS:

INSTALLED_APPS += ("djcelery", )
CELERYBEAT_SCHEDULER = "djcelery.schedulers.DatabaseScheduler"

然后在您的设置中添加以下行。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管理中监控任务。要启用监控设备,您需要运行celerycam:

python /var/www/gorod/manage.py celerycam

要进行定期任务,您可以使用celery.decorators.periodic_task.

# 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)
    },
}

相关内容

  • 没有找到相关文章

最新更新