django-celery的配置及使用
阿新 • • 發佈:2018-11-29
定時任務:定期去統計日誌,資料備份,或者其他的統計任務
相關概念
task:需要執行的任務
worker:負責幹活的小弟們
broker:結果存放的位置
celery的安裝和使用
pip install celery pip install celery-with-redis pip install django安裝-celery apt install redis-server
配置
ALLOWED_HOSTS = ['*'] INSTALLED_APPS = ( ... 'djcelery', ‘自己的APP’ } import djcelery djcelery.setup_loader() BROKER_URL='redis://localhost:6379/1' CELERY_CONCURRENCY=2(設定worker的併發數量) CELERY_RESULT_BACKEND = 'redis://localhost:6379/2settings.py檔案'
from __future__ import absolute_import #絕對路徑匯入 from celery import Celery from django.conf import settings import os #設定系統的環境配置用的是Django的 os.environ.setdefault("DJANGO_SETTING_MODULE", "工程名字.settings") #例項化celery app = Celery('celery.pymycelery') app.conf.timezone = "Asia/Shanghai" #指定celery的配置來源 用的是專案的配置檔案settings.py app.config_from_object("django.conf:settings") #讓celery 自動去發現我們的任務(task) app.autodiscover_tasks(lambda : settings.INSTALLED_APPS) #你需要在app目錄下 新建一個叫tasks.py(一定不要寫錯)檔案
from __future__ import absolute_import, unicode_literals from .celery import app as celery_app__init__.py
from celery import task import time @task def hello_celery(loop): for i in range(loop): print 'hello' time.sleep(2)tasks.py
任務函式名.delay(引數,,,,)
在settings.py檔案新增 CELERYBEAT_SCHEDULE = { 'schedule-test': { 'task': 'app的名字.tasks.hello_celery', 'schedule': timedelta(seconds=3), 'args': (2,) }, }settings.py
啟動: celery -A 你的工程名稱 beat -l info(或者python manage.py celery beat --loglevel=info)
from celery.schedules import crontab crontab(minute=u'00', hour=u'11',day_of_week='mon,tue,wed,thu,sun') 示例如下: 'every-week-three-and-four-run-get_data_with_param':{ 'task': 'APP的名字.tasks.get_data_with_param', 'schedule': crontab(day_of_week="3, 4"), 'args':(4, ) }
注意:
如果只開啟定時服務 沒有開啟worker服務 那麼定時任務會被放入任務佇列,但是由於沒有幹活兒的worker 那麼任務是不會被執行,當worker服務被啟動後 會立刻去任務佇列領任務並執行
#<分鐘> <小時> <日> <月份> <星期> <命令> */1 * * * * date>>a.txt #用date>>~/crontest可以很清楚的看到測試的效果 5 * * * * ls #指定每小時的第5分鐘執行一次ls命令 30 5 * * * ls #指定每天的 5:30 執行ls命令 30 7 8 * * ls #指定每月8號的7:30分執行ls命令 30 5 8 6 * ls #指定每年的6月8日5:30執行ls命令 30 6 * * 0 ls #指定每星期日的6:30執行ls命令【注:0表示星期天,1表示星期1。星期也可以用英文來表示,sun表示星期天,mon表示星期一等。】 30 3 10,20 * * ls #每月10號及20號的3:30執行ls命令【注:“,”用來連線多個不連續的時段】 25 8-11 * * * ls #每天8-11點的第25分鐘執行ls命令【注:“-”用來連線連續的時段】 */15 * * * * ls #每15分鐘執行一次ls命令【即每個小時的第0 15 30 45 60分鐘執行ls命令】 30 6 */10 * * ls #每個月中,每隔10天6:30執行一次ls命令【即每月的1、11、21、31日是的6:30執行一次ls 命令。】 50 7 * * * root run-parts /etc/cron.daily #每天7:50以root 身份執行/etc/cron.daily目錄中的所有可執行檔案【注:run-parts引數表示執行後面目錄中的所有可執行檔案。】 重啟服務 :/etc/init.d/cron restart 計劃是分使用者的,只對當前使用者顯示 */20 4 10,13 6-8 *計劃任務