我有一个 Azure DevOps 发布管道,它部署了一个 Python Azure 函数,然后调用它。Python 函数做了一些繁重的工作,因此需要几分钟才能执行。
Invoke Azure Function 任务的完成事件有两个选项: Api Response和Callback .0
使用Api Response时的最大响应时间是 20 秒,所以我需要使用Callback。好的。使用此文档,我实现了一个 Azure 函数,该函数立即返回一个 HTTPResponse,然后将完成数据发布到指定的端点。这是我的 Azure 函数的完整代码:
import logging
import time
import threading
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
t = threading.Thread(target=do_work, args=(req,))
t.start()
return func.HttpResponse("Succeeded", status_code=200)
def do_work(req: func.HttpRequest):
logging.info ("Starting asynchronous worker task")
#time.sleep(21)
try:
planUrl = req.headers["PlanUrl"]
projectId = req.headers["ProjectId"]
hubName = req.headers["HubName"]
planId = req.headers["PlanId"]
taskInstanceId = req.headers["TaskInstanceId"]
jobId = req.headers["JobId"]
endpoint = f"{planUrl}/{projectId}/_apis/distributedtask/hubs/{hubName}/plans/{planId}/events?api-version=2.0-preview.1"
body = {
"name": "TaskCompleted",
"taskId": taskInstanceId,
"jobId": jobId,
"result": "succeeded"
}
logging.info(endpoint)
logging.info(body)
requests.post(endpoint, data=body)
except:
pass
finally:
logging.info ("Completed asynchronous worker task")
现在,Invoke Azure Function 任务不会超时,但也不会完成。看起来它正在等待其他事情发生:
不知道我应该在这里做什么。我也在GitHub 上关注这个线程,但它并没有导致解决方案。