gpt4 book ai didi

python - HttpTrigger 使用python依次执行

转载 作者:行者123 更新时间:2023-12-03 00:26:20 26 4
gpt4 key购买 nike

我使用 python 创建了一个 HttpTrigger Azure 函数。但我想在同一项目中使用 python 创建另一个 HttpTrigger Azure Functions。在此应用程序中,我想在执行第二个 HttpTrigger Azure 函数之后执行第一个 HttpTrigger Azure 函数。我怎样才能实现它?

因为在 Python Azure Functions 中没有持久函数。这就是为什么我无法理解如何执行一个又一个的 azure 函数。

最佳答案

假设有两个HttpTrigger函数HttpTriggerAHttpTriggerB ,我想到的直接解决方案是请求HttpTriggerA的公共(public)url来自HttpTriggerB通过使用 requests 的 HTTP 客户端请求来实现功能,如我的第一个版本 HttpTriggerB 中的代码所示代码。

import logging

import azure.functions as func
import requests
from urllib.parse import urlparse

def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')

name = req.params.get('name') or 'Peter Pan'
codeA = req.params.get('codeA') or ''
o = urlparse(req.url)
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')

if name:
print("B be invoked.")
resp = requests.get(f"{o.scheme}://{o.netloc}/api/HttpTriggerA?name={name}&code={codeA}")
return func.HttpResponse(f"Hello {name}! from B {resp.status_code == 200 and resp.text or ''}")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)

但是,我在本地或Azure上测试上面的代码后,它不起作用。它将卡在代码行 resp = requests.get(f"{o.scheme}://{o.netloc}/api/HttpTriggerA?name={name}&code={codeA}") 处,当我访问 url http(s)://<the host of local or Azure>:<7071 or 80>/api/HttpTriggerB?name=Peter%20Pan&code=<code for HttpTriggerB>&codeA=<code for HttpTriggerA> 时。挂起问题的原因似乎是由在单例或单线程中运行的函数引起的。

所以我切换到另一个解决方案,从HttpTriggerB的html内容中使用Ajax请求。它的工作原理如下图所示。

enter image description here

这是我的代码 HttpTriggerB函数,HttpTriggerA函数只需由 func new 生成.

import logging

import azure.functions as func
#import requests
from urllib.parse import urlparse

def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')

name = req.params.get('name') or 'Peter Pan'
codeA = req.params.get('codeA') or ''
o = urlparse(req.url)
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')

if name:
print("B be invoked.")
#resp = requests.get(f"{o.scheme}://{o.netloc}/api/httptriggera?name={name}&code={req.params.get('codeA')}")
html = """
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

Hello """+name+"""! from B<br/>
<span id="A"></span>

<script>
$.when(
$.get('"""+o.scheme+'://'+o.netloc+'/api/HttpTriggerA?name='+name+'&code='+codeA+"""'),
$.ready
).done(function( data ) {
$( "#A" ).html( data[0] );
});
</script>
"""
return func.HttpResponse(html, mimetype="text/html")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)

希望有帮助。

关于python - HttpTrigger 使用python依次执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57143531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com