如何将多个参数传递给Azure持久活动函数

2024-05-13 07:03:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我的orchestrator接收一个负载,该负载包含需要与其他数据集一起传递给活动函数的指令

如何将多个参数传递给活动函数?还是我必须将所有数据混合在一起

def orchestrator_function(context: df.DurableOrchestrationContext):
    
    # User defined configuration
    instructions: str = context.get_input()

    task_batch = yield context.call_activity("get_tasks", None)
    
    # Need to pass in instructions too
    parallel_tasks = [context.call_activity("perform_task", task) for task in task_batch]

    results = yield context.task_all(parallel_tasks)
    
    return results

perform_task活动需要来自task_batch的项和用户输入instructions

我在我的function.json中做了什么吗

解决方法 不太理想,但我可以将多个参数作为一个元组传递

something = yield context.call_activity("activity", ("param_1", "param_2"))

然后,我只需要在活动中引用参数的正确索引


Tags: 数据函数intaskgetparallelbatchcontext
2条回答

为了补充@Ari的好答案,这里的代码将数据从客户端函数(本例中为HTTP请求)一直传递到活动函数:

Client -> Orchestrator -> Activity

客户

async def main(req: func.HttpRequest, starter: str) -> func.HttpResponse:
    client = df.DurableOrchestrationClient(starter)

    req_data = req.get_json()
    img_url = req_data['img_url']
    payload = {"img_url": img_url}
    
    instance_id = await client.start_new(req.route_params["functionName"], None, payload)

    logging.info(f"Started orchestration with ID = '{instance_id}'.")

    return client.create_check_status_response(req, instance_id)

编曲

def orchestrator_function(context: df.DurableOrchestrationContext):
    input_context = context.get_input()
    img_url = input_context.get('img_url')

    some_response= yield context.call_activity('MyActivity', img_url)
    
    return [some_response]

活动

def main(imgUrl: str) -> str:
    print(f'.... Image URL = {imgUrl}')

    return imgUrl

似乎没有课本上的方法可以做到这一点。我选择给我的单个参数一个通用名称,如parameterpayload

然后,在orchestrator中传入值时,我会这样做:

payload = {"value_1": some_var, "value_2": another_var}
something = yield context.call_activity("activity", payload)

然后在activity函数中,我再次解包

编辑:一些隐藏的文档似乎显示https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-error-handling?tabs=python

相关问题 更多 >