celery 是乙個 基於python開發的分布式非同步訊息任務佇列,通過它可以輕鬆的實現任務的非同步處理
應用
非同步呼叫:那些使用者不關心的但是又存在在我們api裡面的操作 我們就可以用非同步呼叫的方式來優化(傳送郵件 或者上傳頭像)
定時任務:
定期去統計日誌,資料備份,或者其他的統計任務
celery的相關概念
task
需要執行的任務
worker
負責幹活兒的小弟
broker
任務佇列(worker拿任務的地方)
backend
幹完活兒 結果存放的位置
celery基本工作流程
celery的安裝與使用
安裝
sudo pip install celery
sudo pip install celery-with-redis
sudo pip install django-celery
sudo apt install redis-server
配置
settings.py檔案
allowed_hosts = ['*']
...'djcelery',
}import djcelery
djcelery.setup_loader()
broker_url='redis://localhost:6379/1' #任務佇列存放的位置
celery_concurrency=2(設定worker的併發數量)
celery_result_backend = 'redis://localhost:6379/2' #結果存放的位置
settings.py的同級目錄下新建celery.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
#指定celery的配置** 用的是專案的配置檔案settings.py
#讓celery 自動去發現我們的任務(task)
settings.py同級目錄下的__init__.py加入
from __future__ import absolute_import # 要寫在第一行
使用
from celery import task
import time
@task
def hello_celery(loop):
for i in range(loop):
print 'hello'
time.sleep(2)
2、views.py內的呼叫
任務函式名.delay(引數,,,,)
3、python manage.py migrate 建表(不要忘記建表)4、啟動worker
python manage.py celery worker --loglevel=info (或者celery -a 你的工程名 worker -l info)
注意:修改tasks.py的內容後 要重啟celery的服務(命令:python manage.py celery worker --loglevel=info)
定時任務
在settings.py檔案新增
celerybeat_schedule = ,
}啟動: 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':
坑:
我們啟動定時任務服務時 也要先開啟worker(python manage.py celery worker --loglevel=info)
如果只開啟定時服務 沒有開啟worker服務 那麼定時任務會被放入任務佇列,但是由於沒有幹活兒的worker 那麼任務是不會被執行,當worker服務被啟動後 會立刻去任務佇列領任務並執行
注意:你的任務一定要確保是可以正常執行 celery系列 一 celery 相關配置
celery result backend amqp 官網優化的地方也推薦使用c的librabbitmq celery task result expires 1200 celery任務執行結果的超時時間,我的任務都不需要返回結果,只需要正確執行就行 celeryd concurrency 50 c...
二 Celery基本配置
1 安裝celery的redis依賴 pip install u celery redis 使用unix套接字連線 redis socket path to redis.sock virtual host引數新增到url redis socker path to redis.sock?virtual...
Celery多佇列配置
專案結構 proj init celeryconfig.py celery的配置檔案 tasks.py celery編寫任務檔案 coding utf 8 from future import absolute import from celery import celery proj includ...