Celery定時任務細講
一.目錄結構
任務所在目錄
├── celery_task # celery包 如果celery_task只是建了普通文件夾__init__可以沒有,如果是包一定要有
│ ├── __init__.py # 包文件 看情況要不要存在
│ ├── celery.py # celery連接和配置相關文件,且名字必須交celery.py,其實也不是必須的不然你指令可能要修改
│ └── tasks.py # 所有任務函數
二.配置
celery.py
from celery import Celery
#創建一個Celery對象
broker = 'redis://127.0.0.1:6379/2' #任務放在用redis://ip:端口/第幾個數據庫
backend = 'redis://127.0.0.1:6379/3' #任務結果放在
include = ['celery_task.tasks',] #任務所在目錄
app = Celery(broker=broker, backend=backend, include=include)
app.conf.timezone = 'Asia/Shanghai' #配置時區
app.conf.enable_utc = False # 是否使用UTC
from datetime import timedelta
from celery.schedules import crontab
app.conf.beat_schedule = {
#任務名稱自定義可隨意
'get_banner-task': {
'task': 'celery_task.tasks.get_baidu_info',#任務所在路徑且指定哪個任務
'schedule': crontab(hour=3,minute=0), #定時任務相關
},
}
celery.py
from .celery import app
import requests
@app.task #一定要加裝飾器
def get_baidu_info():
response = requests.get(https://www.baidu.com/')
return response.text
三.配置參數
配置參數的方式
方式一
app.conf.參數名稱=參數值
方法二
app.conf.update(
參數名稱=參數值,
參數名稱=參數值
)
方法三
導入配置文件
app.config_from_object('配置文件路徑')
配置文件
參數名稱=參數值
參數名稱=參數值
一.時區配置
常用中國
app.conf.timezone = 'Asia/Shanghai'
app.conf.enable_utc = False
#也可以直接設置
app.conf.timezone = 'Asia/Shanghai'
國際時間
app.conf.enable_utc = True
app.conf.timezone = 'Europe/London'
#也可以直接設置
app.conf.timezone = 'Europe/London'
二.beat_schedule
- task: 指定任務的名字
- schedule : 設定任務的調度方式,可以是一個表示秒的整數,也可以是一個 timedelta 對象,或者是一個 crontab 對象(后面介紹),總之就是設定任務如何重復執行
- args: 任務的位置參數以列表的形式
- kwargs:任務的關鍵字參數,以字典的形式
- options:所有 apply_async 所支持的參數
timedelta 對象
from datetime import timedelta
'schedule': timedelta(seconds=3), #每三秒 執行一次 其他想想就知道啦
#具體有啥參數我也不想列舉了你ctrl+左鍵進入timedelta源碼自己看就知道啦
crontab 對象
#schedule配置舉例
from celery.schedules import crontab
# 每分鍾執行一次
crontab()
# 每天凌晨十二點執行
crontab(minute=0, hour=0)
# 每十五分鍾執行一次
crontab(minute='*/15')
# 每周日的每一分鍾執行一次
crontab(minute='*',hour='*', day_of_week='sun')
# 每周三,五的三點,七點和二十二點沒十分鍾執行一次
crontab(minute='*/10',hour='3,17,22', day_of_week='thu,fri')