成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

開發(fā)環(huán)境下,如何通過一個命令讓 Fastapi 和 Celery 一起工作

開發(fā) 后端
FastAPI 是 Python Web 領(lǐng)域非常受歡迎的框架,目前 GitHub 上有 39.1k 的 star,已經(jīng)遠(yuǎn)超過了 Django rest framework(22.3k star)。而 Celey 又是異步任務(wù)最流行的框架,常用于數(shù)據(jù)挖掘和機器學(xué)習(xí)等計算密集型任務(wù)的場景中。

[[439191]]

FastAPI 是 Python Web 領(lǐng)域非常受歡迎的框架,目前 GitHub 上有 39.1k 的 star,已經(jīng)遠(yuǎn)超過了 Django rest framework(22.3k star)。而 Celey 又是異步任務(wù)最流行的框架,常用于數(shù)據(jù)挖掘和機器學(xué)習(xí)等計算密集型任務(wù)的場景中。如果需要通過 API 來異步調(diào)用任務(wù),那這兩個框架可以放在一起工作。本文來分享一下如何讓 FastAPI 和 Celery 更好的相互配合,開發(fā)環(huán)境下如何通過一個命令就可以讓兩者一起工作。

0、安裝依賴

  1. pip install fastapi celery uvicorn 

1、寫個純 celery 任務(wù)

首先,讓我們來寫一個純屬 celery 的任務(wù),讓它正常運行,然后在通過 fastapi 來調(diào)用它。

假設(shè)你的機器已經(jīng)安裝了 Python3 和 celery,并且本機已經(jīng)開啟了 redis,運行在 6379 端口上。

現(xiàn)在讓我們寫一個簡單的任務(wù):計算兩數(shù)之和,文件名為:celery_app.py 代碼如下:

  1. #!/Users/aaron/py38env/bin/python 
  2. # filename: celery_app.py 
  3. from celery import Celery 
  4.  
  5. app = Celery("tasks", broker='redis://127.0.0.1:6379/0', backend='redis://127.0.0.1:6379/0'
  6.  
  7. @app.task 
  8. def add(x, y): 
  9.     return x + y 

然后啟動一個 worker 接收遠(yuǎn)程調(diào)用。

  1. celery -A celery_app worker -l info 

如果要遠(yuǎn)程異步調(diào)用這個 add 函數(shù),我們需要再編寫一個文件 start_celery_app.py,內(nèi)容如下:

  1. from celery_app import add #導(dǎo)入我們的任務(wù)函數(shù)add 
  2. import time 
  3. result = add.delay(12,12) #異步調(diào)用,這一步不會阻塞,程序會立即往下運行 
  4.  
  5. while not result.ready():# 循環(huán)檢查任務(wù)是否執(zhí)行完畢 
  6.     print(time.strftime("%H:%M:%S")) 
  7.     time.sleep(1) 
  8.  
  9. print(result.get()) #獲取任務(wù)的返回結(jié)果 
  10. print(result.successful()) #判斷任務(wù)是否成功執(zhí)行 

任務(wù)返回了結(jié)果 24,命令成功完成,

此時 worker 界面增加的信息如下:

2、通過 fastapi 來執(zhí)行

編寫一個 api.py 通過接口來調(diào)用上述的 add 函數(shù):

  1. from fastapi import FastAPI 
  2. import celery_app 
  3.  
  4. app = FastAPI() 
  5.  
  6. @app.get("/"
  7. def read_root(): 
  8.     result = celery_app.add.delay(12, 12) 
  9.     return {"12+12": result.get()} 

啟動服務(wù):

  1. uvicorn api:app --host 0.0.0.0 --port 8000 --reload 

然后訪問:http://127.0.0.1:8000,會發(fā)現(xiàn)任務(wù)成功執(zhí)行:

這樣我們啟動了兩個獨立的進程,一個是 celery 的 worker,一個是 fastapi 的 app,這樣做沒問題,且生產(chǎn)環(huán)境下是嚴(yán)格要求分開運行的,不過,開發(fā)環(huán)境下如果這樣做就太低效了。

3、開發(fā)環(huán)境下如何一條命令啟動

如果不使用兩個終端來啟動兩個命令,我們可以使用 Celery 提供的測試實用程序在后臺線程中啟動 celery worker,比如寫一個這樣的文件run.py,內(nèi)容如下:

  1. import uvicorn 
  2.  
  3. original_callback = uvicorn.main.callback 
  4.  
  5. def callback(**kwargs): 
  6.     from celery.contrib.testing.worker import start_worker 
  7.     from celery_app import app 
  8.  
  9.     with start_worker(app, perform_ping_check=False, loglevel="info"): 
  10.         original_callback(**kwargs) 
  11.  
  12. uvicorn.main.callback = callback 
  13.  
  14.  
  15. if __name__ == "__main__"
  16.     uvicorn.main() 

這樣,只需要執(zhí)行一條命令就可以同時啟動 celery worker 和 fastapi 接口服務(wù),調(diào)試的時候是不是非常方便:圖片

最后的話

 

本文分享了 fastapi 和 celery 是如何配合工作的,并分享了一個用于開發(fā)環(huán)境的腳本,可以通過一個命令來啟動 celery worker 和 fastapi,可能不是完美的解決方案,但確實提升了開發(fā)效率,我覺得這是值得的,如果有幫助還請點贊、在看、關(guān)注,感謝閱讀。

本文轉(zhuǎn)載自微信公眾號「Python七號」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Python七號公眾號。

 

責(zé)任編輯:武曉燕 來源: Python七號
相關(guān)推薦

2009-06-19 15:11:34

DWR和Spring

2022-06-06 09:00:00

Kubernete容器虛擬機

2011-01-20 11:42:49

同事

2020-10-12 08:02:04

開發(fā)人員開發(fā)編碼

2013-08-19 11:31:43

2010-04-14 16:45:29

Oracle 9i全索

2011-07-25 09:14:40

程序員

2013-07-29 14:15:07

職場痛并快樂團隊協(xié)作

2024-08-02 09:49:35

Spring流程Tomcat

2024-06-17 11:59:39

2015-10-20 16:48:06

AnsibleDocker可擴展設(shè)計

2023-04-11 07:48:32

WebGLCanvas

2024-08-29 09:18:55

2022-10-08 07:55:33

DemoMongoDB異步

2025-06-18 02:55:00

2022-12-02 14:20:09

Tetris鴻蒙

2009-11-06 08:57:31

WCF開發(fā)

2023-06-05 18:23:01

AI人工智能

2021-04-12 18:03:39

Nginx架構(gòu)負(fù)載

2021-10-27 06:49:34

線程池Core函數(shù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 手机在线一区二区三区 | 日韩一区二区三区视频 | 国产精品婷婷 | 男人天堂99| 毛片免费看的 | 日韩一区二区在线免费观看 | 亚洲狠狠爱 | h视频网站在线观看 | 黄色片在线免费看 | 日韩国产在线 | 91精品久久久久久久久中文字幕 | 国产精品美女一区二区三区 | 欧美日韩精品一区二区三区四区 | 国产精品久久福利 | 欧美激情一区二区 | 亚洲国产一区二区三区 | 波多野结衣一区二区三区 | 久久久这里只有17精品 | 亚洲日本视频 | 天天影视网天天综合色在线播放 | 日韩在线播放一区 | 国内久久 | 亚洲在线 | 久久久久综合 | 人人干人人舔 | 精品中文字幕久久 | 男女羞羞视频网站 | 亚洲福利av | 国产乱码精品1区2区3区 | 亚洲精品美女视频 | 99re在线视频精品 | 国产精品69毛片高清亚洲 | 91精品在线播放 | 国产精品一区二区在线 | 日韩视频免费看 | 九色在线观看 | 成人夜晚看av | 精品久久久久久久久久久久久久 | 国产乱码精品一品二品 | 美女久久久久 | 亚洲一区二区三区在线观看免费 |