Azure-Funktionen: Probieren Sie dauerhafte Funktionen für Python aus

Einführung

Anscheinend wurden Pythons dauerhafte Funktionen am 24. Juni 2020 zu einer öffentlichen Vorschau ...

Durable Functions now supports Python

Also habe ich es schnell vor Ort versucht.

Überprüfungsumgebung

Dokumentation und GitHub Basierend auf -durable-python) haben wir die folgende Verifizierungsumgebung vorbereitet.

Ein Projekt erstellen

Erstellen Sie ein Projekt mit der Erweiterung Azure-Funktionen. Befolgen Sie die Anweisungen zur Erweiterung, um ein Python-Funktionsprojekt zu erstellen. image.png

Öffnen Sie "require.txt" des erstellten Projekts und fügen Sie das Modul "azure-functions-durable> = 1.0.0b6" für dauerhafte Funktionen hinzu. image.png

Öffnen Sie ein VS Code-Terminal und aktivieren Sie die in Ihrem Projekt erstellte virtuelle Python-Umgebung. Installieren Sie das Modul mit "require.txt" in der virtuellen Python-Umgebung.

> .\.venv\Scripts\activate
> python -m pip install -r requirements.txt

image.png

Eine Funktion erstellen

Erstellen Sie nach dem Erstellen des Projekts die Funktionen Orchestrator, Activity und Client. Dokumentation soll die Vorlage für dauerhafte Funktionen verwenden, aber im Moment Da es keine Vorlage gibt, erstellen Sie sie mit der Vorlage "Http Trigger" und schreiben Sie den Inhalt von "\ _init \ _. Py" und "functions.json" neu.

image.png

Aktivitätsfunktion

Erstellen Sie eine Funktion "Dauerhafte Aktivität" mit der Vorlage "HTTP-Trigger" und schreiben Sie "\ _init \ _. Py" und "functions.json" mit den folgenden Inhalten neu. Der Inhalt ist so einfach wie die Rückgabe des an die Funktion übergebenen Werts mit "Hallo" am Anfang. Um das Verständnis des Ausführungsstatus der Funktion zu erleichtern, warten wir 2 Sekunden auf den Vorgang, damit "Aktivität {Name}" im Protokoll angezeigt wird.

_init_.py


import logging
import time

def main(name: str) -> str:

    time.sleep(2)

    logging.warning(f"Activity {name}")
    return f'Hello {name}!'

functions.json


{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "name",
      "type": "activityTrigger",
      "direction": "in",
      "datatype": "string"
    }
  ],
  "disabled": false
}

Orchestrator-Funktion

Erstellen Sie eine "Durable-Orchestrator" -Funktion mit der Vorlage "Http Trigger" und schreiben Sie "\ _init \ _. Py" und "functions.json" mit den folgenden Inhalten neu. Die Werte von "Tokyo", "Seattle" und "London" werden an die zuvor erstellte Aktivitätsfunktion übergeben und die Ergebnisse in einem Array gespeichert. Mit jedem Aufruf ist eine Rendite verbunden, um als Funktionskette zu fungieren. Die Methode zum Aufrufen der Aktivitätsfunktion ist dieselbe wie bei JavaScript, solange die Funktion zu einem Schlangenfall wird.

_init_.py


import azure.durable_functions as df

def orchestrator_function(context: df.DurableOrchestrationContext):
    #Rufen Sie die Aktivitätsfunktion auf
    task1 = yield context.call_activity("durable-activity", "Tokyo")
    task2 = yield context.call_activity("durable-activity", "Seattle")
    task3 = yield context.call_activity("durable-activity", "London")

    outputs = [task1, task2, task3]
    return outputs


main = df.Orchestrator.create(orchestrator_function)

functions.json


{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "name": "context",
      "type": "orchestrationTrigger",
      "direction": "in"
    }
  ],
  "disabled": false
}

Client-Funktion

Erstellen Sie eine "Durable-Client" -Funktion mit der Vorlage "Http Trigger" und schreiben Sie "\ _init \ _. Py" und "functions.json" mit den folgenden Inhalten neu. Der Aufruf erfolgt durch Angabe der Orchestrator-Funktion in "client.start_new". Die aufrufende Methode ist dieselbe wie JavaScript, der Bindungstyp ist jedoch in JavaScript "durableClient", unterscheidet sich jedoch auch von "orchestrationClient".

_init_.py


import logging

from azure.durable_functions import DurableOrchestrationClient
import azure.functions as func

async def main(req: func.HttpRequest, starter: str, message):

    logging.info(starter)
    client = DurableOrchestrationClient(starter)

    #Start von Orchestrator
    instance_id = await client.start_new('durable-orchestrator')
    response = client.create_check_status_response(req, instance_id)
    message.set(response)

functions.json


{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "post",
        "get"
      ]
    },
    {
      "direction": "out",
      "name": "message",
      "type": "http"
    },
    {
      "name": "starter",
      "type": "orchestrationClient",
      "direction": "in",
      "datatype": "string"
    }
  ]
}

Lokale Ausführung von Funktionen

Nachdem die Funktion erstellt wurde, führen wir sie lokal aus. Für dauerhafte Funktionen ist Azure Storage aufgrund seines Mechanismus erforderlich. Wenn Sie es also lokal ausführen möchten, verwenden Sie Azure Storage Emulator. Wenn Sie Emulator verwenden möchten, öffnen Sie "local.settings.json" im Stammverzeichnis des Projekts, weisen Sie "AzureWebJobsStorage" "UseDevelopmentStorage = true" zu und starten Sie Azure Storage Emulator.

json:local.settings.json


{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "python"
  }
}

image.png

Drücken Sie F5, um den Debug-Modus aufzurufen. Wenn der Prozess gestartet wird, wird die URL der Client-Funktion angezeigt. Greifen Sie daher mit einem Client wie Postman darauf zu. image.png

Wenn Sie mit Postman eine Get-Anfrage stellen, fließt das Protokoll zum Terminal und die Statusverwaltungs-URL wird als Antwort zurückgegeben. image.png

Wenn Sie das angezeigte Protokoll überprüfen, sehen Sie, dass die gelben Warnbuchstaben ungefähr alle 2 Sekunden in der Reihenfolge "Aktivität Tokio", "Aktivität Seattle", "Aktivität London" angezeigt werden. Sie können sehen, dass die Funktionskette ordnungsgemäß funktioniert. image.png

Als ich den Status von Orchestrator mit "statusQueryGetUri" in der Antwort überprüfte, war der runtimeStatus "Completed" und ein Array von "Hello Tokyo!", "Hello Seattle!" Und "Hello London!" Wurde als Ausgabe erhalten. image.png

Fan-Out/Fan-In Ich werde auch Fan-Out / Fan-In ausprobieren, weil es eine große Sache ist. Schreiben Sie die Orchestrator-Funktion wie folgt um.

_init_.py


import azure.durable_functions as df

def orchestrator_function(context: df.DurableOrchestrationContext):
    #Rufen Sie die Aktivitätsfunktion auf
    # task1 = yield context.call_activity("durable-activity", "Tokyo")
    # task2 = yield context.call_activity("durable-activity", "Seattle")
    # task3 = yield context.call_activity("durable-activity", "London")

    # outputs = [task1, task2, task3]

    tasks = []
    tasks.append(context.call_activity("durable-activity", "Tokyo"))
    tasks.append(context.call_activity("durable-activity", "Seattle"))
    tasks.append(context.call_activity("durable-activity", "London"))

    outputs = yield context.task_all(tasks)

    return outputs


main = df.Orchestrator.create(orchestrator_function)

Ich habe versucht, das umgeschriebene auszuführen. In der Reihenfolge "Tokio", "Seattle" und "London" registrierte Aufgaben wurden in zufälliger Reihenfolge als "Seattle", "London" und "Tokio" verarbeitet. Jeder Prozess fand jedoch alle 2 Sekunden statt, und es schien nicht die für Fan-Out / Fan-In erwartete Parallelverarbeitung zu sein. Es befindet sich noch in der Vorschau, daher erwarte ich es für die Zukunft. image.png

Zusammenfassung

Obwohl es sich um eine Python-Version handelt, handelt es sich um dauerhafte Funktionen. Die Skriptmethode ist also dieselbe wie bei JavaScript, und es scheint, dass Sie problemlos entwickeln können, wenn Sie über Entwicklungserfahrung mit JavaScript verfügen. Wie in Release beschrieben, ist im Fall von Python die Richtung des maschinellen Lernens und der Datenanalyse Als Nutzungsmethode scheint es interessant zu sein, dass ein neues Szenario wie das Erstellen einer Parallelverarbeitungsumgebung für Daten ohne Server möglich geworden ist.

Referenz

Recommended Posts

Azure-Funktionen: Probieren Sie dauerhafte Funktionen für Python aus
[Azure] Versuchen Sie, Azure-Funktionen zu verwenden
Schlüsselwortargumente für Python-Funktionen
Python #Funktion 1 für Super-Anfänger
Versuchen Sie Python
Python-Funktionen
Versuchen Sie, Python mit Google Cloud-Funktionen zu verwenden
Verwenden Sie Python und MeCab mit Azure-Funktionen
[Für Anfänger] Versuchen Sie Web Scraping mit Python
2016-10-30 sonst für Python3> für:
Python [für mich]
Python> try: / außer:
# Python-Grundlagen (Funktionen)
[Anfänger] Python-Funktionen
Python Einfach zu bedienende Funktionen
Python-Grundlagen: Funktionen
VS Code + Azure-Funktionen + Python-Umgebungskonstruktionsverfahren
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
[Azure-Funktionen / Python] Kettenfunktionen mit Warteschlangenspeicherbindung
Astro: Häufig verwendete Python-Module / -Funktionen zur Analyse
Über Python für Schleife
Python-Anfängerhandbuch (Funktionen)
Python-Grundkurs (12 Funktionen)
[Python of Hikari-] Kapitel 06-04 Funktionen (Argumente und Rückgabewerte 3)
Python-Grundlagen ② für Anweisung
Python versuchen ~ außer ~ sonst
[Python] Memo über Funktionen
Versuchen Sie, in Python nach einem Profil mit einer Million Zeichen zu suchen
Über Python für ~ (Bereich)
Python Lehrbuch für Anfänger
Versuchen Sie Debian + Python 3.4 + django1.7 ……
Refactoring-Tools, die mit Python verwendet werden können
Versuchen Sie gRPC in Python
Toolchain für Python für Android
[Hikari-Python] Kapitel 06-01 Funktionen (integrierte Funktionen und Funktionsdefinitionen)
# 4 [Python] Grundlagen der Funktionen
Speichereingabe- / Ausgabememo von Python in Azure-Funktionen
In Python integrierte Funktion ~ Zip ~
Probieren Sie 9 Slices in Python aus
[Python of Hikari-] Kapitel 06-03 Funktionen (Argumente und Rückgabewerte 2)
Integrierte Funktionen von Wrap Python
Versuchen Sie es mit Tweepy [Python2.7]
OpenCV für Python-Anfänger
Python versuchen / außer Memo
Installieren Sie Python (für Windows)
[Python] für Anweisungsfehler
Wartung der Python-Umgebung für Projekte
Versuchen Sie, verschiedene Informationen anzuzeigen, die für das Debuggen mit Python nützlich sind
Probieren Sie die ähnliche Suche von Image Search mit Python SDK [Search] aus.
Festlegen der Cache-Steuerung für den BLOB-Speicher in Azure Storage in Python
[Hikari-Python] <Zusatz> Kapitel 06-05 Funktionen (Argumente und Rückgabewerte 4)
Curry jede Funktion mit Python ....
Python> Lambda> winzige Funktionen / Rückruffunktionen
Einführung in Python-Funktionen
Python-Memo (für mich): Array
Fabric unterstützt Python 3