同一函数应用程序中的Python Azure函数需要不同的包版本

问题描述 投票:0回答:1

我们有一个项目需要多个azure功能。第一个计划是使用消费计划将所有功能托管在同一功能应用程序上。从微软文档中,我了解到同一功能应用程序上的功能共享相同的执行过程,这意味着它们需要使用相同的包版本,对吗?

我看到了 .NET 函数作为独立函数运行的选项,但这对于 Python 运行时是不可能的。

对于不同需求版本的功能,唯一的解决方案是将它们分成不同的功能应用程序吗?

我还想知道,由于同一功能应用程序中的功能共享相同的执行过程,是否值得在同一应用程序中托管多个功能。原因是,由于使用相同的进程,一旦一个函数被触发,所有其他函数代码都会被编译并存储在内存中,即使它们没有被触发,这使得成本比将函数拆分到不同的应用程序中更高。

非常感谢您的反馈

python azure function azure-functions serverless
1个回答
0
投票

对于不同需求版本的功能,唯一的解决方案是将它们分成不同的功能应用程序吗?

是的,当多个函数托管在同一个Azure Function App中时,它们共享相同的执行环境,它可以限制不同的函数需要不同的包版本,

particularly since Python doesn't support isolated process execution in Azure Functions

如果存在名为function_a和function_b的函数 他们有不同的包需要运行该功能。 功能_a:

import azure.functions as func
import pandas as pd
from azure.functions import HttpRequest, HttpResponse
from azure.functions.decorators import FunctionApp, http_trigger

app = FunctionApp()

@app.function_name(name="FunctionB")
@app.route(route="FunctionB")
def main(req: HttpRequest) -> HttpResponse:
    data = {'Column1': [4, 5, 6]}
    df = pd.DataFrame(data)
    return HttpResponse(f"Dataframe in Function B:\n{df}")

需求.txt:

pandas==1.1.5
azure-functions

函数_b:

import azure.functions as func
import pandas as pd
from azure.functions import HttpRequest, HttpResponse
from azure.functions.decorators import FunctionApp, http_trigger

app = FunctionApp()

@app.function_name(name="FunctionB")
@app.route(route="FunctionB")
def main(req: HttpRequest) -> HttpResponse:
    data = {'Column1': [4, 5, 6]}
    df = pd.DataFrame(data)
    return HttpResponse(f"Dataframe in Function B:\n{df}")

需求.txt:

pandas==1.3.3
azure-functions

使用命令

pip install -r requirements.txt
安装需求。

将每个功能部署到 Azure 门户中单独的功能应用程序中。

如果我在单功能应用程序中部署这两个功能,则会导致包版本不匹配。

每个Function App都会独立处理其依赖关系,不同版本之间不存在冲突

pandas

© www.soinside.com 2019 - 2024. All rights reserved.