J'ai une fonction persistante Azure écrite en python avec un coordinateur et deux fonctions actives
orchestrator appelle la première fonction active et reçoit en retour une liste de variables (la liste des noms et cette liste peuvent être dynamiques à chaque exécution de la fonction)
L'étape suivante consiste à appeler la deuxième fonction d'activité pour chaque élément de la liste (traitement séquentiel - en raison des limitations de l'API du deuxième appel de fonction d'activité)
#dynamically gets generated by the first activity function payload=[1,2,3,4] tasks = [context.call_activity("secondfunction",ps) for ps in payload] output = yield context.task_all(tasks)
J'utilise autre chose que la série dans la méthode de diffusion, mais je n'arrive pas à trouver une alternative à ce que j'essaie de faire.
De plus, dans le fichier host.json, j'ai essayé de forcer qu'une seule fonction active puisse s'exécuter à un instant donné pour éviter un traitement parallèle
"extensions": { "durableTask": { "maxConcurrentActivityFunctions": 1, "maxConcurrentOrchestratorFunctions": 1 } }
Il convient également de noter que je ne peux pas transmettre la liste entière à la fonction d'activité, car si j'exécute la fonction d'activité, cela prendra plus de 5 à 10 minutes, ce qui est le délai d'attente pour les fonctions Azure, donc essayez de parcourir la fonction d'orchestration de liste
Mais les résultats ne sont pas continus
Merci beaucoup pour vos commentaires
Vous pouvez essayer d'utiliser les deux méthodes suivantes pour répondre à vos exigences :-
Méthode 1 :-
Mon function_app.py :-
import azure.functions as func import azure.durable_functions as df myapp = df.dfapp(http_auth_level=func.authlevel.anonymous) # http starter @myapp.route(route="orchestrators/{functionname}") @myapp.durable_client_input(client_name="client") async def http_start(req: func.httprequest, client): function_name = req.route_params.get('functionname') instance_id = await client.start_new(function_name, none) # pass the functionname here response = client.create_check_status_response(req, instance_id) return response # orchestrator @myapp.orchestration_trigger(context_name="context") def hello_orchestrator(context): cities = ["seattle", "tokyo", "london"] tasks = [] for city in cities: tasks.append(context.call_activity("hello", city)) # wait for all tasks to complete results = yield context.task_all(tasks) return results # activity @myapp.activity_trigger(input_name="city") def hello(city: str): print(f"processing {city}...") # your activity function logic goes here result = f"hello {city}!" return result
Sortie :-
url de la fonction :-
http://localhost:7071/api/orchestrators/hello_orchestrator
Méthode 2 :-
function_app.py :-
import azure.functions as func import azure.durable_functions as df myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS) # HTTP Starter @myApp.route(route="orchestrators/{functionName}") @myApp.durable_client_input(client_name="client") async def http_start(req: func.HttpRequest, client): function_name = req.route_params.get('functionName') instance_id = await client.start_new(function_name, None) # Pass the functionName here response = client.create_check_status_response(req, instance_id) return response # Orchestrator @myApp.orchestration_trigger(context_name="context") def hello_orchestrator(context): # Call the first activity to get a list of names names_list = yield context.call_activity("get_names") # Process each name sequentially using the second activity results = [] for name in names_list: result = yield context.call_activity("process_name", name) results.append(result) return results # First Activity @myApp.activity_trigger def get_names(): # Your logic to retrieve a dynamic list of names goes here # For demonstration purposes, returning a hardcoded list return ["John", "Alice", "Bob"] # Second Activity @myApp.activity_trigger(input_name="name") def process_name(name: str): print(f"Processing {name}...") # Your logic to process each name goes here result = f"Hello {name}!" return result
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!