es6 Calss類
阿新 • • 發佈:2020-07-26
celery的使用
# 1 非同步任務框架,執行非同步任務,執行延遲任務,執行定時任務
# 2 Celery is a project with minimal funding, so we don’t support Microsoft Windows. Please don’t open any issues related to that platform.
pip install celery
9.1 基本結構
# 只寫一個py檔案 celery_task from celery import Celery broker='redis://127.0.0.1:6379/1' #broker任務佇列 backend='redis://127.0.0.1:6379/2' # 結構儲存,執行完的結果存在這 app=Celery(__name__,broker=broker,backend=backend) @app.task def add(x,y): print(x,y) return x+y # 啟動worker # 非windows celery worker -A celery_task -l info # windows: # pip3 install eventlet celery worker -A celery_task -l info -P eventlet # 新增任務 from celery_task import add add(3,4) # 直接執行,不會被新增到broker中 ret=add.delay(5,4) #想broker中新增一個任務 # 檢視任務執行結果 from celery_task import app from celery.result import AsyncResult id = '3e397fd7-e0c1-4c5c-999c-2655a96793bb' if __name__ == '__main__': async = AsyncResult(id=id, app=app) if async.successful(): result = async.get() print(result) elif async.failed(): print('任務失敗') elif async.status == 'PENDING': print('任務等待中被執行') elif async.status == 'RETRY': print('任務異常後正在重試') elif async.status == 'STARTED': print('任務已經開始被執行')
9.2 包結構
# 新建一個包,celery_task -celery_task -__init__.py -celery.py -task1.py -task2.py # celery.py from celery import Celery broker='redis://127.0.0.1:6379/1' #broker任務佇列 backend='redis://127.0.0.1:6379/2'# 結構儲存,執行完的結果存在這 app=Celery(__name__,broker=broker,backend=backend,include=['celery_task.task1','celery_task.task2']) # task.py from .celery import app @app.task def add(x,y): print(x,y) return x+y # 新增任務(非同步任務,延遲任務) from celery_task.task1 import add from celery_task.task2 import mutile # 提交非同步 ret=add.delay(6,7) # 提交延遲任務 from datetime import datetime, timedelta # 需要utc時間 eta=datetime.utcnow() + timedelta(seconds=10) ret=add.apply_async(args=(240, 50), eta=eta)
9.3 執行定時任務
#1 celery.py from celery import Celery broker='redis://127.0.0.1:6379/1' #broker任務佇列 backend='redis://127.0.0.1:6379/2' # 結構儲存,執行完的結果存在這 app=Celery(__name__,broker=broker,backend=backend,include=['celery_task.task1','celery_task.task2']) # 執行定時任務 # 時區 app.conf.timezone = 'Asia/Shanghai' # 是否使用UTC app.conf.enable_utc = False # 任務的定時配置 from datetime import timedelta from celery.schedules import crontab app.conf.beat_schedule = { 'add-task': { 'task': 'celery_task.task1.add', # 'schedule': timedelta(seconds=3), 'schedule': crontab(hour=8, day_of_week=1), # 每週一早八點 'args': (300, 150), }