Celery概念 配置

2021-08-30 15:45:58 字數 2712 閱讀 2029

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...