celery task非同步任務

2022-07-07 09:12:10 字數 2892 閱讀 8525

業務端後台:通過python manage執行

執行用例時,用python manage執行時會卡,影響效率

celery task 本身自己也是個服務,非同步處理case

非同步:小明去給我買個東西,我去寫**,小明買完回來給我

同步:小明去給我買個東西,我在這裡等著他回來

celery結構

--celery task

--run

--tasks #執行非同步任何的核心位址

--config.py #存celery配置

--main.py #執行目錄

安裝命令:

pip install celery 

pip  install celery==4.4.7    #指定版本安裝

pip install eventlet

# 接收任務的中介軟體

broker_url = "redis:"

# 任務結果的中介軟體

result_backend = "redis:"

from celery import celery

import os,django

if not os.getenv('django_settings_module'):

os.environ['django_settings_module'] = 'sky.settings'

# 獲取celery的配置資訊

# 提供tasks的路徑,自動發現需要執行的task任務

# mac 安裝

# sudo pip install celery

# 啟動celery的方法 預設以cpu的核數多程序的方式啟動

# celery -a 應用路徑 worker -l 日誌級別

# mac同學

# celery -a celery_tasks.main worker -l info 普通啟動

# celery multi start w1 -a celery_tasks.main -l info --logfile=logs/celerylog.log --pidfile=logs/celerypid.pid 後台執行

# celery flower -a celery_tasks.main 開啟乙個web頁面啟動 需要提前安裝下flow 安裝命令:pip install flower

# win同學

# pip install celery

# pip install eventlet

# celery -a celery_tasks.main worker -l info -p eventlet

# -- * - **** ---

# - ** ---------- [config]

# - ** ---------- .> transport: redis: 設定的broker的佇列是那個

# - ** ---------- .> results: redis: 設定backend的儲存位址

# - *** --- * --- .> concurrency: 4 (prefork) 預設啟動的程序數

# -- ******* ---- .> task events: off (enable -e to monitor tasks in this worker)

# --- ***** -----

# -------------- [queues]

# .> celery exchange=celery(direct) key=celery

# 在view檢視中只需要匯入tasks中寫好的任務方法 通過任務方法呼叫delay()即可

# from celery_tasks.run.tasks import run_case

# 呼叫task任務 引數可以在delay中傳遞,正常呼叫一樣

# run_case.delay()

# name 給方法命名

def demo():

logger.info('info')

logger.debug('debug')

執行啟動命令後

celery -a celery_tasks.main worker -l info -p eventlet

可以看到可執行的任務:
[tasks]

. demo

#測試

from celery_tasks.run.tasks import demo

#通過這個方法呼叫非同步函式

demo.delay()

#呼叫日誌

[2021-01-23 22:13:28,277: info/mainprocess] celery@xiaolin-pc ready.

[2021-01-23 22:13:28,288: info/mainprocess] pidbox: connected to redis:

[2021-01-23 22:31:06,912: info/mainprocess] received task: demo[fe18b516-40bc-47e4-8243-5451242bd4d8]

[2021-01-23 22:31:06,914: info/mainprocess] demo[fe18b516-40bc-47e4-8243-5451242bd4d8]: info

[2021-01-23 22:31:06,918: info/mainprocess] task demo[fe18b516-40bc-47e4-8243-5451242bd4d8] succeeded in 0.0s: none

非同步 非同步任務

非同步任務 記錄一下學習完springboot後進行使用非同步方法時的筆記 service層 author yesijie date 2019 11 29 15 25 service public class asyncc catch interruptedexception e system.ou...

非同步任務 定時任務

一 在主程式開啟非同步註解功能 enableasync enableasync 開啟非同步註解功能 public class 二 標明非同步類 asyns service async 表注該類為非同步類 public class asynservice catch interruptedexcept...

AsyncTask非同步任務

asynctask非同步任務怎麼寫 寫乙個類繼承asynctask,重寫方法 doinbackgroud 再new 這個類,執行物件 execute 在ui執行緒裡面寫這個類的實現方法 doinbackground有可能是新開的執行緒,有可能是執行緒池裡面的執行緒 執行順序 onpreexecute...