我正在撰寫一個Web 掛鉤服務器以在推送我的 git 存盤庫時接收更新。在收到來自 GitHub 的 POST 請求后,我執行了幾個git pull, mvn install需要很長時間的命令。
但是 GitHub 發送的 web hook 請求在 10 秒后超時。
我的代碼:
import logging
import os
from fastapi import FastAPI
app = FastAPI()
logger = logging.getLogger("uvicorn")
def exec_cmd(command):
out = os.system(command)
logger.info(str(out))
@app.post('/')
def func():
logger.info("WebHook received")
exec_cmd("git pull")
exec_cmd("mvn clean install")
exec_cmd("killall java")
return {}
if __name__ == "__main__":
import uvicorn
exec_cmd("git pull")
uvicorn.run("main:app", debug=False, reload=False, host="0.0.0.0")
因此我想在后臺運行長時間運行的任務,并盡快回應 GitHub 的請求。
我怎樣才能做到這一點?
(如果我使exec_cmd()函式異步,當請求回傳時, exec_cmd() 函式直到完成才會運行。)
uj5u.com熱心網友回復:
它們在 FastAPI 中呼叫BackgroundTasks,可以通過將 BackgroundTasks 型別添加到您的視圖函式簽名來使用。
檔案中給出的示例可以進一步適應您的需求:
from fastapi import BackgroundTasks, FastAPI
app = FastAPI()
def process_repository(email: str, message=""):
exec_cmd("git pull")
exec_cmd("mvn clean install")
exec_cmd("killall java")
@app.post("/")
async def update_repository(background_tasks: BackgroundTasks):
background_tasks.add_task(process_repository)
return {"message": "Repository update has begun"}
由于您不檢查結果,這應該適用于您的用例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/448912.html
標籤:Python github 异步 网络挂钩 快速API
