{"id":41221,"date":"2020-02-06T20:42:46","date_gmt":"2020-02-06T17:42:46","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/python-gateway-v-intersystems-iris"},"modified":"2020-02-06T20:42:46","modified_gmt":"2020-02-06T17:42:46","slug":"python-gateway-v-intersystems-iris","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/python-gateway-v-intersystems-iris","title":{"rendered":"Python Gateway in InterSystems IRIS","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Dieser Artikel ist dem Python Gateway gewidmet \u2014 einem Open-Source-Community-Projekt f\u00fcr die Datenplattform InterSystems IRIS. Dieses Projekt erm\u00f6glicht es, beliebige Machine-Learning-Algorithmen, die in Python (der Hauptumgebung f\u00fcr viele Data Scientists) erstellt wurden, zu orchestrieren und zahlreiche verf\u00fcgbare Bibliotheken zu verwenden, um schnell adaptive, automatisierte analytische AI\/ML-L\u00f6sungen auf der InterSystems IRIS-Plattform zu erstellen. In diesem Artikel zeige ich, wie InterSystems IRIS Prozesse in Python orchestrieren, Daten effizient bidirektional \u00fcbertragen und intelligente Gesch\u00e4ftsprozesse erstellen kann.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"plan\">Plan<\/h1>\n<p><\/p>\n<ol>\n<li>Einf\u00fchrung.<\/li>\n<li>Werkzeuge.<\/li>\n<li>Installation.<\/li>\n<li>API.<\/li>\n<li>Interoperabilit\u00e4t.<\/li>\n<li>Jupyter Notebook.<\/li>\n<li>Fazit.<\/li>\n<li>Links.<\/li>\n<li>MLToolkit.<\/li>\n<\/ol>\n<p><\/p>\n<h1 id=\"vvedenie\">Einf\u00fchrung<\/h1>\n<p><\/p>\n<p>Python ist eine hochgradig flexible Programmiersprache, die auf die Steigerung der Entwicklerproduktivit\u00e4t und die Lesbarkeit des Codes abzielt. In dieser Artikelreihe werde ich die M\u00f6glichkeiten der Anwendung von Python auf der InterSystems IRIS-Plattform erl\u00e4utern, wobei der Schwerpunkt dieses Artikels auf der Verwendung von Python als Sprache zur Erstellung und Anwendung von Machine-Learning-Modellen liegt.<\/p>\n<p><\/p>\n<p>Machine Learning (ML) ist eine Klasse von Methoden der k\u00fcnstlichen Intelligenz, bei denen nicht direkt eine Aufgabe gel\u00f6st wird, sondern das Lernen w\u00e4hrend der L\u00f6sung vieler \u00e4hnlicher Aufgaben im Vordergrund steht. <\/p>\n<p><\/p>\n<p>Maschinenlernalgorithmen und -modelle werden immer verbreiteter. Es gibt viele Gr\u00fcnde daf\u00fcr, aber sie lassen sich auf Zug\u00e4nglichkeit, Einfachheit und das Erzielen praktischer Ergebnisse zur\u00fcckf\u00fchren. Ist Clusterbildung oder sogar neuronales Netzmodellierung eine neue Technologie? <\/p>\n<p><\/p>\n<p>Nat\u00fcrlich nicht, aber heutzutage ist es nicht mehr notwendig, Hunderte von Tausenden Zeilen Code zu schreiben, um ein einziges Modell zu starten, und die Kosten f\u00fcr die Erstellung und Anwendung von Modellen werden immer geringer.<\/p>\n<p><\/p>\n<p>Die Werkzeuge entwickeln sich weiter \u2014 w\u00e4hrend wir nicht \u00fcber vollst\u00e4ndig GUI-orientierte AI\/ML-Werkzeuge verf\u00fcgen, beobachten wir den gleichen Fortschritt bei vielen anderen Klassen von Informationssystemen, zum Beispiel BI (von der Codierung bis zur Nutzung von Frameworks und GUI-orientierten konfigurierbaren L\u00f6sungen), auch in den Werkzeugen zur Erstellung von AI\/ML. Wir haben die Phase des Programmierens hinter uns gelassen und nutzen heute Frameworks zur Erstellung und Schulung von Modellen.<\/p>\n<p><\/p>\n<p>Weitere Verbesserungen, wie die M\u00f6glichkeit, vortrainierte Modelle zu verbreiten, bei denen der Endbenutzer nur das Training des Modells mit seinen spezifischen Daten abschlie\u00dfen muss, erleichtern den Einstieg in die Anwendung von maschinellem Lernen. Diese Fortschritte erleichtern das Lernen von maschinellem Lernen sowohl f\u00fcr Fachleute als auch f\u00fcr Unternehmen im Allgemeinen erheblich.<\/p>\n<p><\/p>\n<p>Andererseits sammeln wir immer mehr Daten. Dank einer einheitlichen Datenplattform wie InterSystems IRIS kann all diese Information sofort aufbereitet und als Ausgangsdaten f\u00fcr Modelle des maschinellen Lernens verwendet werden.<\/p>\n<p><\/p>\n<p>Mit dem \u00dcbergang in die Cloud wird der Start von AI\/ML-Projekten einfacher als je zuvor. Wir k\u00f6nnen nur die Ressourcen nutzen, die wir ben\u00f6tigen. Dar\u00fcber hinaus k\u00f6nnen wir dank der Parallelisierung, die von Cloud-Plattformen angeboten wird, Zeit sparen.<\/p>\n<p><\/p>\n<p>Aber wie sieht es mit den Ergebnissen aus? Hier wird es komplizierter. Es gibt viele Werkzeuge zum Aufbau von Modellen, \u00fcber die ich im Folgenden sprechen werde. Ein gutes Modell zu erstellen ist nicht einfach, aber was kommt dann? Die Erzielung von Nutzen aus der Nutzung des Modells durch das Unternehmen ist ebenfalls eine keine triviale Aufgabe. Der Kern des Problems liegt in der Trennung von analytischen und transaktionalen Lasten sowie den Datenmodellen. Wenn wir ein Modell trainieren, tun wir dies normalerweise mit historischen Daten. Aber der Platz f\u00fcr das gebaute Modell liegt in der transaktionalen Datenverarbeitung. Was n\u00fctzt das beste Modell zur Erkennung betr\u00fcgerischer Transaktionen, wenn wir es nur einmal am Tag ausf\u00fchren? Die Betr\u00fcger sind l\u00e4ngst mit dem Geld verschwunden. Wir m\u00fcssen das Modell mit historischen Daten trainieren, aber wir m\u00fcssen es auch in Echtzeit auf neue eingehende Daten anwenden, damit unsere Gesch\u00e4ftsprozesse gem\u00e4\u00df den Vorhersagen des Modells agieren k\u00f6nnen.<\/p>\n<p><\/p>\n<p>Das ML Toolkit ist ein Satz von Werkzeugen, dessen Ziel es ist, genau dies zu erreichen: Modelle und die transaktionale Umgebung zu verbinden, damit die erstellten Modelle direkt in Ihren Gesch\u00e4ftsprozessen eingesetzt werden k\u00f6nnen. Der Python Gateway ist Teil des ML Kit und bietet eine Integration mit der Programmiersprache Python (\u00e4hnlich wie der R Gateway, der als Teil des ML Kit die Integration mit der Programmiersprache R erm\u00f6glicht).<\/p>\n<p><\/p>\n<h1 id=\"instrumentariy\">Werkzeug<\/h1>\n<p><\/p>\n<p>Bevor wir fortfahren, m\u00f6chte ich einige Werkzeuge und Bibliotheken f\u00fcr Python beschreiben, die wir sp\u00e4ter verwenden werden.<\/p>\n<p><\/p>\n<h2 id=\"tehnologii\">Technologien<\/h2>\n<p><\/p>\n<ul>\n<li>Python ist eine interpretierte, hochgradig einsetzbare Programmiersprache. Der Hauptvorteil dieser Sprache ist die umfangreiche Bibliothek an mathematischen, ML- und AI-Bibliotheken. \u00c4hnlich wie bei ObjectScript handelt es sich um eine objektorientierte Sprache, aber alles wird dynamisch und nicht statisch definiert. Au\u00dferdem ist alles ein Objekt. Sp\u00e4tere Artikel setzen ein fl\u00fcchtiges Verst\u00e4ndnis der Sprache voraus. Wenn Sie mit dem Lernen beginnen m\u00f6chten, empfehle ich Ihnen, mit <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">Dokumentation<\/a><\/noindex>.<\/li>\n<li>F\u00fcr unsere sp\u00e4teren \u00dcbungen installieren Sie <noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python 3.6.7 64 bit<\/a><\/noindex>.<\/li>\n<li>IDE: Ich verwende <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/pycharm\/\">PyCharm<\/a><\/noindex>, aber generell gibt es auch andere. <noindex><a rel=\"nofollow\" href=\"https:\/\/realpython.com\/python-ides-code-editors-guide\/\">viele<\/a><\/noindex>. Wenn Sie Atelier verwenden, gibt es ein Eclipse-Plugin f\u00fcr Python-Entwickler. Wenn Sie VS Code verwenden, gibt es eine Erweiterung f\u00fcr Python. <\/li>\n<li>Notebook: Anstelle einer IDE k\u00f6nnen Sie Ihre Skripte in Online-Notebooks schreiben und teilen. Das beliebteste unter ihnen ist <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"biblioteki\">Bibliotheken<\/h2>\n<p><\/p>\n<p>Hier ist eine (unvollst\u00e4ndige) Liste von Bibliotheken f\u00fcr maschinelles Lernen:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.numpy.org\/\">Numpy<\/a><\/noindex> \u2014 ein grundlegendes Paket f\u00fcr pr\u00e4zise Berechnungen.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pandas.pydata.org\/\">Pandas<\/a><\/noindex> \u2014 hochleistungsf\u00e4hige Datenstrukturen und Datenanalysetools.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/matplotlib.org\/\">Matplotlib<\/a><\/noindex> \u2014 Erstellung von Diagrammen.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/seaborn.pydata.org\/\">Seaborn<\/a><\/noindex> \u2014 Datenvisualisierung, die auf matplotlib basiert.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/scikit-learn.org\/stable\/\">Sklearn<\/a><\/noindex> \u2014 Methoden f\u00fcr maschinelles Lernen.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xgboost.readthedocs.io\/en\/latest\/index.html\">XGBoost<\/a><\/noindex> \u2014 Algorithmen f\u00fcr maschinelles Lernen innerhalb der Gradienten-Boosting-Methodologie.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/radimrehurek.com\/gensim\/\">Gensim<\/a><\/noindex> \u2014 NLP.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/keras.io\/\">Keras<\/a><\/noindex> \u2014 neuronale Netzwerke.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/\">Tensorflow<\/a><\/noindex> \u2014 Plattform zur Erstellung von Modellen f\u00fcr maschinelles Lernen.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/pytorch.org\/\">PyTorch<\/a><\/noindex> \u2014 Plattform zur Erstellung von Modellen f\u00fcr maschinelles Lernen, die auf Python ausgerichtet ist.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nyoka-pmml\/nyoka\">Nyoka<\/a><\/noindex> \u2014 PMML aus verschiedenen Modellen.<\/li>\n<\/ul>\n<p><\/p>\n<p>AI\/ML-Technologien erm\u00f6glichen es, Gesch\u00e4fte effektiver und anpassungsf\u00e4higer zu gestalten. Dar\u00fcber hinaus werden diese Technologien heute einfacher entwickelt und umgesetzt. Beginnen Sie mit dem Lernen \u00fcber AI\/ML-Technologien und wie diese Ihrer Organisation beim Wachsen helfen k\u00f6nnen.<\/p>\n<p><\/p>\n<h1 id=\"ustanovka\">Installation<\/h1>\n<p><\/p>\n<p>Es gibt mehrere M\u00f6glichkeiten, Python Gateway zu installieren und zu nutzen:<\/p>\n<p><\/p>\n<ul>\n<li>dem Betriebssystem\n<ul>\n<li>Windows<\/li>\n<li>Linux<\/li>\n<li>Mac<\/li>\n<\/ul>\n<\/li>\n<li>Docker\n<ul>\n<li>Verwenden Sie ein Image von DockerHub<\/li>\n<li>Erstellen Sie Ihr eigenes Image<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Unabh\u00e4ngig von der Installationsmethode ben\u00f6tigen Sie den Quellcode. Der einzige Ort zum Herunterladen des Codes ist <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">die Release-Seite<\/a><\/noindex>. Sie enth\u00e4lt getestete stabile Releases, nehmen Sie einfach die letzte Version. Momentan ist dies 0.8, aber im Laufe der Zeit werden neue folgen. Klonen Sie nicht das Repository, laden Sie die neueste Version herunter.<\/p>\n<p><\/p>\n<h2 id=\"os\">dem Betriebssystem<\/h2>\n<p><\/p>\n<p>Wenn Sie das Python Gateway auf einem Betriebssystem installieren, m\u00fcssen Sie zuerst (unabh\u00e4ngig vom Betriebssystem) Python installieren. Dazu:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Installieren Sie Python 3.6.7 64 Bit<\/a><\/noindex>. Es wird empfohlen, Python im Standardverzeichnis zu installieren.<\/li>\n<li>Installieren Sie das Modul <code>dill<\/code>: <code>pip install dill<\/code>.<\/li>\n<li>Laden Sie den ObjectScript-Code (d.h. <code>do $system.OBJ.ImportDir(\"C:InterSystemsReposPythoniscpy\", \"*.cls\", \"c\", , 1)<\/code>) in jeden Namensraum mit Produkteinheiten. Falls Sie m\u00f6chten, dass ein vorhandener Namensraum Produkteinheiten unterst\u00fctzt, f\u00fchren Sie aus: <code>write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1)<\/code>.<\/li>\n<li>F\u00fcgen Sie hinzu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">callout DLL\/SO\/DYLIB<\/a><\/noindex> in den Ordner <code>bin<\/code> Ihres InterSystems IRIS-Instanz. Die Bibliotheksdatei sollte unter dem Pfad verf\u00fcgbar sein, der zur\u00fcckgegeben wird von <code>write ##class(isc.py.Callout).GetLib()<\/code>. <\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"windows\">Windows<\/h3>\n<p><\/p>\n<ol>\n<li>Stellen Sie sicher, dass die Umgebungsvariable <code>PYTHONHOME<\/code> auf Python 3.6.7 zeigt.<\/li>\n<li>Stellen Sie sicher, dass die Systemumgebungsvariable <code>PATH<\/code> die Variable enth\u00e4lt <code>PYTHONHOME<\/code> (oder das Verzeichnis, auf das sie zeigt).<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"linux-debianubuntu\">Linux (Debian\/Ubuntu)<\/h3>\n<p><\/p>\n<ol>\n<li>\u00dcberpr\u00fcfen Sie, dass die Umgebungsvariable <code>PATH<\/code> enth\u00e4lt <code>\/usr\/lib<\/code> und <code>\/usr\/lib\/x86_64-linux-gnu<\/code>. Verwenden Sie die Datei <code>\/etc\/environment<\/code> zum Setzen der Umgebungsvariablen.<\/li>\n<li>Im Falle von Fehlern <code>undefined symbol: _Py_TrueStruct<\/code> setzen Sie die Einstellung <code>PythonLib<\/code>. Auch im <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme<\/a><\/noindex> gibt es einen Abschnitt zur Fehlersuche.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"mac\">Mac<\/h3>\n<p><\/p>\n<ol>\n<li>Derzeit wird nur Python 3.6.7 von <noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python.org<\/a><\/noindex>unterst\u00fctzt. \u00dcberpr\u00fcfen Sie die Variable <code>PATH<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Wenn Sie Umgebungsvariablen ge\u00e4ndert haben, starten Sie Ihr Produkt von InterSystems neu.<\/p>\n<p><\/p>\n<h2 id=\"docker\">Docker<\/h2>\n<p><\/p>\n<p>Die Nutzung von Containern hat eine Reihe von Vorteilen: <\/p>\n<p><\/p>\n<ul>\n<li>Portabilit\u00e4t<\/li>\n<li>Effektivit\u00e4t<\/li>\n<li>Isolierung<\/li>\n<li>Leichtigkeit<\/li>\n<li>Unver\u00e4nderlichkeit<\/li>\n<\/ul>\n<p><\/p>\n<p>Schauen Sie sich diese <noindex><a rel=\"nofollow\" href=\"https:\/\/community.intersystems.com\/post\/continuous-delivery-your-intersystems-solution-using-gitlab-part-v-why-containers\">Artikelreihe<\/a><\/noindex> f\u00fcr weitere Informationen zur Verwendung von Docker mit InterSystems-Produkten an. <\/p>\n<p><\/p>\n<p>Alle Builds des Python Gateways basieren derzeit auf Containern. <code>2019.4<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"gotovyy-obraz\">Fertiges Image<\/h3>\n<p><\/p>\n<p>F\u00fchren Sie aus: <code>docker run -d -p 52773:52773 --name irispy intersystemscommunity\/irispy-community:latest<\/code>, um das Python Gateway mit InterSystems IRIS Community Edition herunterzuladen und zu starten. Das war's.<\/p>\n<p><\/p>\n<h3 id=\"sozdayte-svoy-sobstvennyy-obraz\">Erstellen Sie Ihr eigenes Image<\/h3>\n<p><\/p>\n<p>F\u00fchren Sie im Wurzelverzeichnis des Repositories aus: <code>docker build --force-rm --tag intersystemscommunity\/irispy:latest .<\/code>.<br \/>\nStandardm\u00e4\u00dfig wird das Image auf Basis des Images <code>store\/intersystems\/iris-community:2019.4.0.383.0<\/code>, aber Sie k\u00f6nnen dies \u00e4ndern, indem Sie die Variable <code>IMAGE<\/code>.<br \/>\nUm aus InterSystems IRIS zu bauen, f\u00fchren Sie aus: `docker build --build-arg IMAGE=store\/intersystems\/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity\/irispy:latest &lt;.<\/p>\n<p><\/p>\n<p>Danach k\u00f6nnen Sie das Docker-Image starten:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">docker run -d \n  -p 52773:52773 \n  -v \/\/:\/mount \n  --name irispy \n  intersystemscommunity\/irispy:latest \n  --key \/mount\/iris.key<\/code><\/pre>\n<p><\/p>\n<p>Wenn Sie ein auf InterSystems IRIS Community Edition basierendes Image verwenden, m\u00fcssen Sie den Schl\u00fcssel m\u00f6glicherweise nicht angeben.<\/p>\n<p><\/p>\n<h3 id=\"kommentarii\">Kommentare<\/h3>\n<p><\/p>\n<ul>\n<li>Testprozess <code>isc.py.test.Process<\/code> Speichert eine Reihe von Bildern im tempor\u00e4ren Verzeichnis. M\u00f6glicherweise m\u00f6chten Sie diesen Pfad auf ein gemountetes Verzeichnis \u00e4ndern. Dazu bearbeiten Sie die Einstellung <code>WorkingDir<\/code> indem Sie das gemountete Verzeichnis angeben.<\/li>\n<li>Zugriff auf das Terminal erhalten Sie mit: <code>docker exec -it irispy sh<\/code>.<\/li>\n<li>Zugang zum Systemverwaltungsportal mit Login <code>SuperUser<\/code>\/<code>SYS<\/code>.<\/li>\n<li>Um den Container zu stoppen, f\u00fchren Sie aus: <code>docker stop irispy &amp;&amp; docker rm --force irispy<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"proverka-ustanovki\">\u00dcberpr\u00fcfung der Installation<\/h2>\n<p><\/p>\n<p>Nachdem Sie das Python Gateway installiert haben, sollten Sie \u00fcberpr\u00fcfen, ob es funktioniert. F\u00fchren Sie diesen Code im Terminal von InterSystems IRIS aus:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Callout).Setup() \nset sc = ##class(isc.py.Main).SimpleString(\"x='HELLO'\", \"x\", , .var).\nwrite var<\/code><\/pre>\n<p><\/p>\n<p>Es sollte das Folgende ausgegeben werden <code>HELLO<\/code> \u2014 der Wert der Python-Variablen <code>x<\/code>. Wenn der zur\u00fcckgegebene Status <code>sc<\/code> ein Fehler oder <code>var<\/code> leer ist, \u00fcberpr\u00fcfen Sie <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">die Readme \u2013 Abschnitt Fehlerbehebung<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"api\">API<\/h1>\n<p><\/p>\n<p>Das Python Gateway ist installiert, und Sie haben sichergestellt, dass es funktioniert. Es ist Zeit, es zu nutzen!<br \/>\nDas Hauptinterface zu Python ist <code>isc.py.Main<\/code>. Es bietet die folgenden Gruppen von Methoden (alle geben zur\u00fcck <code>%Status<\/code>):<\/p>\n<p><\/p>\n<ul>\n<li>Codeausf\u00fchrung<\/li>\n<li>Daten\u00fcbertragung<\/li>\n<li>Hilfsmethoden<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"ispolnenie-koda\">Codeausf\u00fchrung<\/h2>\n<p><\/p>\n<p>Diese Methoden erm\u00f6glichen es, beliebigen Python-Code auszuf\u00fchren.<\/p>\n<p><\/p>\n<h3 id=\"simplestring\">SimpleString<\/h3>\n<p><\/p>\n<p><code>SimpleString<\/code> \u2014 dies ist die Hauptmethode. Sie nimmt 4 optionale Argumente an:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 der auszuf\u00fchrende Code. Zeilenumbruchzeichen: <code>$c(10)<\/code>.<\/li>\n<li><code>returnVariable<\/code> \u2014 der Name der Variable f\u00fcr die R\u00fcckgabe.<\/li>\n<li><code>serialization<\/code> \u2014 wie zu serialisieren <code>returnVariable<\/code>. 0 \u2014 string (Standard), 1 \u2014 repr.<\/li>\n<li><code>result<\/code> \u2014 ByRef-Verweis auf die Variable, in die der Wert geschrieben wird <code>returnVariable<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Vorhin haben wir ausgef\u00fchrt:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).SimpleString(\"x='HELLO'\", \"x\", , .var).<\/code><\/pre>\n<p><\/p>\n<p>In diesem Beispiel weisen wir der Python-Variable <code>x<\/code> system-id D <code>Hallo<\/code> zu und m\u00f6chten den Wert der Python-Variable <code>x<\/code> in eine ObjectScript-Variable zur\u00fcckgeben <code>var<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"executecode\">ExecuteCode<\/h3>\n<p><\/p>\n<p>ExecuteCode ist eine sicherere und weniger eingeschr\u00e4nkte Alternative <code>SimpleString<\/code>.<br \/>\nStrings in der InterSystems IRIS-Plattform sind auf 3.641.144 Zeichen begrenzt, und wenn Sie eine l\u00e4ngere Codezeile ausf\u00fchren m\u00f6chten, m\u00fcssen Sie Streams verwenden.<br \/>\nEs werden zwei Argumente angenommen:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 einen Python-Code-String oder -Stream zur Ausf\u00fchrung.<\/li>\n<li><code>variable<\/code> \u2014 (optional) weist das Ergebnis der Ausf\u00fchrung <code>code<\/code> dieser Python-Variablen zu.<\/li>\n<\/ul>\n<p><\/p>\n<p>Verwenden Sie:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).ExecuteCode(\"2*3\", \"y\").<\/code><\/pre>\n<p><\/p>\n<p>In diesem Beispiel multiplizieren wir 2 mit 3 und speichern das Ergebnis in der Python-Variable <code>y<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"peredacha-dannyh\">Daten\u00fcbertragung<\/h2>\n<p><\/p>\n<p>\u00dcbertragen Sie Daten nach Python und zur\u00fcck.<\/p>\n<p><\/p>\n<h3 id=\"python---intersystems-iris\">Python -&gt; InterSystems IRIS<\/h3>\n<p><\/p>\n<p>Es gibt 4 M\u00f6glichkeiten, den Wert einer Python-Variable in InterSystems IRIS zu erhalten, je nach der ben\u00f6tigten Serialisierung:<\/p>\n<p><\/p>\n<ul>\n<li><code>String<\/code> f\u00fcr grundlegende Datentypen und Debugging.<\/li>\n<li><code>Repr<\/code> zur Speicherung einfacher Objekte und zur Fehlerbehebung.<\/li>\n<li><code>JSON<\/code> f\u00fcr einfaches Manipulieren von Daten auf der Seite von InterSystems IRIS.<\/li>\n<li><code>Pickle<\/code> zur Speicherung von Objekten.<\/li>\n<\/ul>\n<p><\/p>\n<p>Diese Methoden erm\u00f6glichen es, Variablen aus Python als Strings oder Streams zu erhalten.<\/p>\n<p><\/p>\n<ul>\n<li><code>GetVariable(variable, serialization, .stream, useString)<\/code> \u2014 abrufen <code>serialization<\/code> Variable <code>variable<\/code> in <code>stream<\/code>. Wenn <code>useString<\/code> gleich 1 und die Serialisierung in einen String gespeichert wird, wird ein String und kein Stream zur\u00fcckgegeben.<\/li>\n<li><code>GetVariableJson(variable, .stream, useString)<\/code> \u2014 erhalten Sie die JSON-Serialisierung der Variable.<\/li>\n<li><code>GetVariablePickle(variable, .stream, useString, useDill)<\/code> - erhalten Sie die Pickle- (oder Dill-)Serialisierung der Variable.<\/li>\n<\/ul>\n<p><\/p>\n<p>Versuchen wir, unsere Variable abzurufen. <code>y<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).GetVariable(\"y\", , .val, 1)\nwrite val\n&gt;6<\/code><\/pre>\n<p><\/p>\n<h3 id=\"intersystems-iris---python\">InterSystems IRIS -&gt; Python<\/h3>\n<p><\/p>\n<p>Laden von Daten aus InterSystems IRIS in Python.<\/p>\n<p><\/p>\n<ul>\n<li><code>ExecuteQuery(query, variable, type, namespace)<\/code> \u2014 erstellt einen Datensatz (pandas <code>dataframe<\/code> oder <code>die Umwandlung von numerischen und textuellen Daten in die Formate<\/code>) aus der SQL-Abfrage und weist ihn einer Python-Variable zu. <code>variable<\/code>. Das Paket <code>isc.py<\/code> muss im Bereich verf\u00fcgbar sein, <code>Namespace<\/code> \u2014 hier wird die Abfrage ausgef\u00fchrt.<\/li>\n<li><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 l\u00e4dt Daten aus dem Globalen <code>global<\/code> vom Subscript <code>start<\/code> bis <code>end<\/code> in Python als Variable vom Typ <code>type<\/code>: <code>die Umwandlung von numerischen und textuellen Daten in die Formate<\/code>, oder pandas <code>dataframe<\/code>. Eine Beschreibung der optionalen Argumente <code>mask<\/code> and <code>labels<\/code> ist in der Dokumentation der Klasse und im Repository verf\u00fcgbar. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Data Transfer docs<\/a><\/noindex>.<\/li>\n<li><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 l\u00e4dt Klassendaten <code>class<\/code> vom ID <code>start<\/code> bis <code>end<\/code> in Python als Variable vom Typ <code>type<\/code>: <code>die Umwandlung von numerischen und textuellen Daten in die Formate<\/code>, oder pandas <code>dataframe<\/code>. <code>properties<\/code> \u2014 eine Liste (Trennzeichen: Komma) von Klassenattributen, die in den Datensatz geladen werden sollen. Masken werden unterst\u00fctzt. <code>*<\/code> und <code>?<\/code>. Standardm\u00e4\u00dfig \u2014 <code>*<\/code> (alle Attribute). Attribute <code>%%CLASSNAME<\/code> werden ignoriert.<\/li>\n<li><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 l\u00e4dt Tabellendaten <code>Tabelle<\/code> vom ID <code>start<\/code> bis <code>end<\/code> in Python.<\/li>\n<\/ul>\n<p><\/p>\n<p><code>ExecuteQuery<\/code> \u2014 ist universell (jeder korrekte SQL-Befehl wird an Python \u00fcbergeben). Allerdings <code>ExecuteGlobal<\/code> und seine Umh\u00fcllungen <code>ExecuteClass<\/code> und <code>ExecuteTable<\/code> arbeiten unter einer Reihe von Einschr\u00e4nkungen. Sie sind viel schneller (3-5 Mal schneller als der ODBC-Treiber und 20 Mal schneller <code>ExecuteQuery<\/code>). Weitere Informationen finden Sie in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Data Transfer docs<\/a><\/noindex>.<br \/>\nAlle diese Methoden unterst\u00fctzen die Daten\u00fcbertragung aus jedem Bereich. Das Paket <code>isc.py<\/code> muss im Zielbereich verf\u00fcgbar sein.<\/p>\n<p><\/p>\n<h3 id=\"executequery\">ExecuteQuery<\/h3>\n<p><\/p>\n<p><code>ExecuteQuery(request, variable, type, namespace)<\/code> \u2014 \u00dcbertragung der Ergebnisse jeder korrekten SQL-Abfrage nach Python. Dies ist die langsamste Methode zur Daten\u00fcbertragung. Verwenden Sie sie, wenn <code>ExecuteGlobal<\/code> und seine Umh\u00fcllungen nicht verf\u00fcgbar sind.<\/p>\n<p><\/p>\n<p>Argumente:<\/p>\n<p><\/p>\n<ul>\n<li><code>query<\/code> \u2014 SQL-Abfrage.<\/li>\n<li><code>variable<\/code> \u2014 der Name der Python-Variable, in die die Daten geschrieben werden.<\/li>\n<li><code>type<\/code> \u2014 <code>die Umwandlung von numerischen und textuellen Daten in die Formate<\/code> oder Pandas <code>dataframe<\/code>.<\/li>\n<li><code>Namespace<\/code> \u2014 der Bereich, in dem die Abfrage ausgef\u00fchrt wird.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"executeglobal\">ExecuteGlobal<\/h3>\n<p><\/p>\n<p><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 \u00dcbertragung des Globals in Python.<\/p>\n<p><\/p>\n<p>Argumente:<\/p>\n<p><\/p>\n<ul>\n<li><code>global<\/code> \u2014 der Name des Globals ohne <code>^<\/code><\/li>\n<li><code>variable<\/code> \u2014 der Name der Python-Variable, in die die Daten geschrieben werden.<\/li>\n<li><code>type<\/code> \u2014 <code>die Umwandlung von numerischen und textuellen Daten in die Formate<\/code> oder Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 das erste Subscript des Globals. Erforderlich. <code>%Integer<\/code>.<\/li>\n<li><code>end<\/code> \u2014 das letzte Subscript des Globals. Erforderlich. <code>%Integer<\/code>.<\/li>\n<li><code>mask<\/code> \u2014 Maskenwerte des Globals. Die Maske kann k\u00fcrzer sein als die Anzahl der Felder im Global (in diesem Fall werden die Felder am Ende \u00fcbersprungen). So formatieren Sie die Maske:\n<ul>\n<li><code>+<\/code> Wert so \u00fcbergeben, wie er ist.<\/li>\n<li><code>-<\/code> Wert \u00fcberspringen.<\/li>\n<li><code>b<\/code> \u2014 Boolescher Typ (<code>0<\/code> \u2014 <code>Falsch<\/code>, alles andere ist \u2014 <code>Wahr<\/code>).<\/li>\n<li><code>d<\/code> \u2014 Datum (ab $horolog, unter Windows ab 1970, unter Linux ab 1900).<\/li>\n<li><code>t<\/code> \u2014 Zeit ($horolog, Sekunden nach Mitternacht).<\/li>\n<li><code>m<\/code> \u2014 Zeitstempel (String im FORMAT JAHR-MONAT-TAG STUNDE:MINUTE:SEKUNDE).<\/li>\n<\/ul>\n<\/li>\n<li><code>labels<\/code> \u2014 %Liste der Spaltennamen. Erstes Element \u2014 Name des Subskripts.<\/li>\n<li><code>Namespace<\/code> \u2014 der Bereich, in dem die Abfrage ausgef\u00fchrt wird.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"executeclass\">ExecuteClass<\/h3>\n<p><\/p>\n<p>Wrapper \u00fcber <code>ExecuteGlobal<\/code>. Bereitet den Aufruf basierend auf der Klassendefinition vor <code>ExecuteGlobal<\/code> und ruft ihn auf.<\/p>\n<p><\/p>\n<p><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 \u00dcbertragung von Klassendaten in Python.<\/p>\n<p><\/p>\n<p>Argumente:<\/p>\n<p><\/p>\n<ul>\n<li><code>class<\/code> \u2014 Klassenname<\/li>\n<li><code>variable<\/code> \u2014 der Name der Python-Variable, in die die Daten geschrieben werden.<\/li>\n<li><code>type<\/code> \u2014 <code>die Umwandlung von numerischen und textuellen Daten in die Formate<\/code> oder Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 Start-ID.<\/li>\n<li><code>end<\/code> \u2014 End-ID<\/li>\n<li><code>properties<\/code> \u2014 eine Liste (Trennzeichen: Komma) von Klassenattributen, die in den Datensatz geladen werden sollen. Masken werden unterst\u00fctzt. <code>*<\/code> und <code>?<\/code>. Standardm\u00e4\u00dfig \u2014 <code>*<\/code> (alle Attribute). Attribute <code>%%CLASSNAME<\/code> werden ignoriert.<\/li>\n<li><code>Namespace<\/code> \u2014 der Bereich, in dem die Abfrage ausgef\u00fchrt wird.<\/li>\n<\/ul>\n<p><\/p>\n<p>Alle Eigenschaften werden so \u00fcbergeben, wie sie sind, au\u00dfer den Eigenschaften der Typen <code>te<\/code>, <code>%Zeit<\/code>, <code>%Boolean<\/code> und <code>%Zeitstempel<\/code> \u2014 sie werden in die entsprechenden Python-Klassen konvertiert.<\/p>\n<p><\/p>\n<h3 id=\"executetable\">ExecuteTable<\/h3>\n<p><\/p>\n<p>Wrapper \u00fcber <code>ExecuteClass<\/code>. Translatiert den Tabellennamen in den Klassennamen und ruft <code>ExecuteClass<\/code>auf. Signatur:<\/p>\n<p><\/p>\n<p><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 \u00dcbertragung von Tabellendaten in Python.<\/p>\n<p><\/p>\n<p>Argumente:<\/p>\n<p><\/p>\n<ul>\n<li><code>Tabelle<\/code> \u2014 Tabellenname.<br \/>\nAlle anderen Argumente werden so \u00fcbergeben, wie sie sind, in <code>ExecuteClass<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"zametki\">Notizen<\/h3>\n<p><\/p>\n<ul>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> und <code>ExecuteTable<\/code> arbeiten gleich schnell.<\/li>\n<li><code>ExecuteGlobal<\/code> 20 Mal schneller als <code>ExecuteQuery<\/code> bei gro\u00dfen Datens\u00e4tzen (\u00dcbertragungszeit mehr als &gt;0.01 Sekunden).<\/li>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> und <code>ExecuteTable<\/code> arbeiten mit Globals dieser Struktur: <code>^global(key) = $lb(prop1, prop2, ..., propN)<\/code> wo <code>key<\/code> \u2014 ganze Zahl.<\/li>\n<li>F\u00fcr <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> und <code>ExecuteTable<\/code> unterst\u00fctzter Wertebereich <code>te<\/code> entspricht dem Bereich <code>mktime<\/code> und h\u00e4ngt vom OS ab (<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/c-runtime-library\/reference\/mktime-mktime32-mktime64?view=vs-2019\">windows<\/a><\/noindex>: 1970-01-01, <noindex><a rel=\"nofollow\" href=\"https:\/\/linux.die.net\/man\/3\/mktime\">linux<\/a><\/noindex> 1900-01-01, <noindex><a rel=\"nofollow\" href=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/System\/Conceptual\/ManPages_iPhoneOS\/man3\/mktime.3.html\">mac<\/a><\/noindex>). Verwenden Sie <code>%Zeitstempel<\/code>um Daten au\u00dferhalb dieses Bereichs zu \u00fcbergeben oder verwenden Sie ein pandas dataframe, da dies nur eine Einschr\u00e4nkung f\u00fcr die Liste ist.<\/li>\n<li>F\u00fcr <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> und <code>ExecuteTable<\/code> Alle Argumente, au\u00dfer der Datenquelle (Global, Klasse oder Tabelle) und der Variablen, sind optional.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"primery\">Beispiele<\/h2>\n<p><\/p>\n<p>Testklasse <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/isc\/py\/test\/Person.cls\">isc.py.test.Person<\/a><\/noindex> enth\u00e4lt eine Methode, die alle Optionen zur Daten\u00fcbertragung demonstriert:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set global = \"isc.py.test.PersonD\"\nset class = \"isc.py.test.Person\"\nset table = \"isc_py_test.Person\"\nset query = \"SELECT * FROM isc_py_test.Person\"\n\n\/\/ Allgemeine Argumente\nset variable = \"df\"\nset type = \"dataframe\"\nset start = 1\nset end = $g(^isc.py.test.PersonD, start)\n\n\/\/ Methode 0: ExecuteGlobal ohne Argumente\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)\n\n\/\/ Methode 1: ExecuteGlobal mit Argumenten \n\/\/ Bei der \u00dcbergabe des Globalnamens werden die Feldnamen manuell festgelegt\n\/\/ globalKey - Name des Subskripts \nset labels = $lb(\"globalKey\", \"Name\", \"DOB\", \"TS\", \"RandomTime\", \"AgeYears\", \"AgeDecimal\", \"AgeDouble\", \"Bool\")\n\n\/\/ mask enth\u00e4lt ein Element weniger als labels, da \"globalKey\" der Name des Subskripts ist\n\/\/ Wir \u00fcberspringen %%CLASSNAME\nset mask = \"-+dmt+++b\"\n\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)\n\n\/\/ Methode 2: ExecuteClass\nset sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)\n\n\/\/ Methode 3: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)\n\n\/\/ Methode 4: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)<\/code><\/pre>\n<p><\/p>\n<p>Rufen Sie die Methode auf <code>do ##class(isc.py.test.Person).Test()<\/code> um zu sehen, wie alle Methoden zur Daten\u00fcbertragung funktionieren.<\/p>\n<p><\/p>\n<h2 id=\"vspomogatelnye-metody\">Hilfsmethoden<\/h2>\n<p><\/p>\n<ul>\n<li><code>GetVariableInfo(variable, serialization, .defined, .type, .length)<\/code> \u2014 Informationen \u00fcber die Variable abrufen: ob sie definiert ist, Klasse und L\u00e4nge der Serialisierung.<\/li>\n<li><code>GetVariableDefined(variable, .defined)<\/code> \u2014 ob die Variable definiert ist.<\/li>\n<li><code>GetVariableType(variable, .type)<\/code> \u2014 die Klasse der Variable abrufen.<\/li>\n<li><code>GetStatus()<\/code> \u2014 das letzte Ausnahmeereignis auf der Python-Seite abrufen und l\u00f6schen.<\/li>\n<li><code>GetModuleInfo(module, .imported, .alias)<\/code> \u2014 die Modulvariable und den Importstatus abrufen.<\/li>\n<li><code>GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)<\/code> \u2014 Informationen \u00fcber die Funktion abrufen.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"interoperabelnost\">Interoperabilit\u00e4t<\/h1>\n<p><\/p>\n<p>Sie haben gelernt, das Python Gateway von der Konsole aus aufzurufen. Jetzt beginnen wir, es in der Produktion zu verwenden. Die Grundlage der Interaktion mit Python in diesem Modus ist <code>isc.py.ens.Operation<\/code>. Es erm\u00f6glicht uns:<\/p>\n<p><\/p>\n<ul>\n<li>Python-Code auszuf\u00fchren<\/li>\n<li>Python-Kontext zu speichern\/wiederherzustellen<\/li>\n<li>Daten in Python zu laden und abzurufen<\/li>\n<\/ul>\n<p><\/p>\n<p>Im Prinzip ist die Python-Operation eine Wrapper \u00fcber <code>isc.py.Main<\/code>. Die Operation <code>isc.py.ens.Operation<\/code> erm\u00f6glicht die Interaktion mit dem Python-Prozess aus InterSystems IRIS. F\u00fcnf Anfragen werden unterst\u00fctzt:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.ExecutionRequest<\/code> zur Ausf\u00fchrung von Python-Code. Gibt zur\u00fcck <code>isc.py.msg.ExecutionResponse<\/code> mit dem Ergebnis der Ausf\u00fchrung und den Werten der angeforderten Variablen.<\/li>\n<li><code>isc.py.msg.StreamExecutionRequest<\/code> zur Ausf\u00fchrung von Python-Code. Gibt zur\u00fcck <code>isc.py.msg.StreamExecutionResponse<\/code> das Ergebnis der Ausf\u00fchrung und die Werte der angeforderten Variablen. Entspricht <code>isc.py.msg.ExecutionRequest<\/code>, nimmt jedoch Streams anstelle von Strings entgegen und zur\u00fcck.<\/li>\n<li><code>isc.py.msg.QueryRequest<\/code> f\u00fcr die \u00dcbertragung des Ergebnisses der Ausf\u00fchrung von SQL-Abfragen. Gibt zur\u00fcck <code>Ens.Response<\/code>.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code>\/<code>isc.py.msg.ClassRequest<\/code>\/<code>isc.py.msg.TableRequest<\/code> f\u00fcr die \u00dcbertragung von globalen\/kategorischen\/tabellarischen Daten. Gibt zur\u00fcck <code>Ens.Response<\/code>.<\/li>\n<li><code>isc.py.msg.SaveRequest<\/code> zum Speichern des Python-Kontextes. Gibt zur\u00fcck <code>Ens.StringResponse<\/code> mit der Kontext-ID.<\/li>\n<li>\n<p><code>isc.py.msg.RestoreRequest<\/code> zum Wiederherstellen des Python-Kontextes.<\/p>\n<p><\/p>\n<p>Au\u00dferdem, <code>isc.py.ens.Operation<\/code> hat zwei Einstellungen:<\/p>\n<p><\/p>\n<ul>\n<li><code>Initializer<\/code> \u2014 Auswahl der Klasse, die das Interface implementiert <code>isc.py.init.Abstract<\/code>. Sie kann verwendet werden, um Funktionen, Module, Klassen usw. zu laden. Sie wird einmal beim Start des Prozesses ausgef\u00fchrt.<\/li>\n<li><code>PythonLib<\/code> \u2014 (nur f\u00fcr Linux) Wenn Sie beim Laden Fehler sehen, setzen Sie den Wert auf <code>libpython3.6m.so<\/code> oder sogar auf den vollst\u00e4ndigen Pfad zur Python-Bibliothek. <\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"sozdanie-biznes-processov\">Erstellung von Gesch\u00e4ftsprozessen<\/h2>\n<p><\/p>\n<p>Es stehen zwei Klassen zur Verf\u00fcgung, die die Entwicklung von Gesch\u00e4ftsprozessen erleichtern:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.ens.ProcessUtils<\/code> erm\u00f6glicht das Extrahieren von Annotationen aus Aktivit\u00e4ten mit Platzhaltern f\u00fcr Variablen.<\/li>\n<li><code>isc.py.util.BPEmulator<\/code> erleichtert das Testen von Gesch\u00e4ftsprozessen mit Python. Es kann Gesch\u00e4ftsprozesse (Teile in Python) im aktuellen Prozess ausf\u00fchren.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"podstanovka-peremennyh\">Variablenersetzung<\/h2>\n<p><\/p>\n<p>Alle Gesch\u00e4ftsprozesse, die von <code>isc.py.ens.ProcessUtils<\/code>, erben, k\u00f6nnen die Methode <code>GetAnnotation(name)<\/code> verwenden, um den Wert der Aktivit\u00e4tsannotation nach ihrem Namen zu erhalten. Die Aktivit\u00e4tsannotation kann Variablen enthalten, die auf der InterSystems IRIS-Seite berechnet werden, bevor sie an Python \u00fcbergeben werden. Hier ist die Syntax f\u00fcr Platzhalter von Variablen:<\/p>\n<p><\/p>\n<ul>\n<li><code>${class:method:arg1:...:argN}<\/code> \u2014 Methodenaufruf<\/li>\n<li><code>#{expr}<\/code> \u2014 Code in ObjectScript ausf\u00fchren.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ein Beispiel findet sich im Testgesch\u00e4ftsprozess <code>isc.py.test.Process<\/code>, zum Beispiel in der Aktivit\u00e4t <code>Korrelationsmatrix: Grafik<\/code>: <code>f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png')<\/code>. In diesem Beispiel:<\/p>\n<p><\/p>\n<ul>\n<li><code>#{process.WorkDirectory}<\/code> gibt das Attribut WorkDirectory des Objekts zur\u00fcck <code>prozess<\/code>, welches eine Instanz der Klasse ist <code>isc.py.test.Process<\/code> , also des aktuellen Gesch\u00e4ftsprozesses.<\/li>\n<li><code>${%PopulateUtils:Integer:1:100}<\/code> anschauen, k\u00f6nnen wir sehen, dass das Dr\u00fccken der Schaltfl\u00e4che <code>Integer<\/code> Klasse <code>%PopulateUtils<\/code>, wobei Argumente \u00fcbergeben werden <code>1<\/code> und <code>100<\/code>, die eine zuf\u00e4llige ganze Zahl im Bereich zur\u00fcckgeben <code>1...100<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"testovyy-biznes-process\">Testgesch\u00e4ftsprozess<\/h2>\n<p><\/p>\n<p>Testprodukt und Testgesch\u00e4ftsprozess sind standardm\u00e4\u00dfig als Teil des Python-Gateways verf\u00fcgbar. Um sie zu verwenden:<\/p>\n<p><\/p>\n<ol>\n<li>F\u00fchren Sie im Betriebssystem-Terminal aus: <code>pip install pandas matplotlib seaborn<\/code>. <\/li>\n<li>F\u00fchren Sie im InterSystems IRIS-Terminal aus: <code>do ##class(isc.py.test.CannibalizationData).Import()<\/code> zum Ausf\u00fcllen von Testdaten.<\/li>\n<li>F\u00fchren Sie das Produkt aus <code>isc.py.test.Production<\/code>.<\/li>\n<li>Senden Sie eine Anfrage des Typs <code>Ens.Request<\/code> in <code>isc.py.test.Process<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Schauen wir uns an, wie alles zusammenarbeitet. \u00d6ffnen Sie <code>isc.py.test.Process<\/code> im BPL-Editor:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway in InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/6f83b22e0167e2699d285f3e32bfe373.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"ispolnenie-koda-1\">Codeausf\u00fchrung<\/h3>\n<p><\/p>\n<p>Der wichtigste Aufruf ist die Ausf\u00fchrung von Python-Code:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway in InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/dafa6b8c878ae937b194ff577b86dc89.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Es wird die Anfrage verwendet <code>isc.py.msg.ExecutionRequest<\/code>, hier sind ihre Eigenschaften:<\/p>\n<p><\/p>\n<ul>\n<li><code>Code<\/code> \u2014 Python-Code.<\/li>\n<li><code>SeparateLines<\/code> \u2014 ob der Code zeilenweise ausgef\u00fchrt werden soll. <code>$c(10)<\/code> (<code>n<\/code>) wird verwendet, um Zeilen zu trennen. Beachten Sie, dass es NICHT empfohlen wird, die Nachricht auf einmal zu verarbeiten; diese Funktion dient nur der Verarbeitung. <code>def<\/code> und \u00e4hnlichen mehrzeiligen Ausdr\u00fccken. Standardm\u00e4\u00dfig <code>0<\/code>.<\/li>\n<li><code>Variablen<\/code> ist eine durch Kommas getrennte Liste von Variablen, die in die Antwort eingef\u00fcgt werden sollen.<\/li>\n<li><code>Serialisierung<\/code> \u2014 Wie man die Variablen serialisiert, die wir zur\u00fcckgeben m\u00f6chten. Optionen: <code>Str<\/code>, <code>Repr<\/code>, <code>JSON<\/code>, <code>Pickle<\/code> und <code>Dill<\/code>, standardm\u00e4\u00dfig <code>Str<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>In unserem Fall setzen wir nur die Eigenschaft <code>Code<\/code>, sodass alle anderen Eigenschaften Standardwerte verwenden. Wir setzen sie, indem wir <code>process.GetAnnotation(\"Import pandas\")<\/code>, die zur Laufzeit die Annotation nach dem Ersetzen der Variablen zur\u00fcckgibt. Am Ende wird der Code <code>import pandas as pd<\/code> nach Python \u00fcbergeben. <code>GetAnnotation<\/code> kann n\u00fctzlich sein, um mehrzeilige Python-Skripte zu erhalten, aber es gibt keine Einschr\u00e4nkungen f\u00fcr diese Art der Codierung. Sie k\u00f6nnen die Eigenschaft <code>Code<\/code> auf jede f\u00fcr Sie bequeme Weise festlegen.<\/p>\n<p><\/p>\n<h3 id=\"poluchenie-peremennyh\">Erhalten von Variablen<\/h3>\n<p><\/p>\n<p>Ein weiterer interessanter Aufruf unter Verwendung von <code>isc.py.msg.ExecutionRequest<\/code> \u2014 <code>Korrelationsmatrix: Tabellarisch<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway in InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/8824e49ecaa448551c830e9a90eb5781.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Er berechnet die Korrelationsmatrix auf der Python-Seite und extrahiert die Variable <code>corrmat<\/code> zur\u00fcck nach InterSystems IRIS im JSON-Format, indem die Abfrage-Eigenschaften festgelegt werden:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variablen<\/code>: <code>\"corrmat\"<\/code><\/li>\n<li><code>Serialisierung<\/code>: <code>\"JSON\"<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Wir k\u00f6nnen die Ergebnisse im Visual Trace sehen:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway in InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/713bcade8cb1018f2974cba2cab712b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Und wenn wir diesen Wert in BP ben\u00f6tigen, k\u00f6nnen wir ihn so abrufen: <code>callresponse.Variables.GetAt(\"corrmat\")<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh-1\">Daten\u00fcbertragung<\/h3>\n<p><\/p>\n<p>Als n\u00e4chstes sprechen wir \u00fcber die \u00dcbertragung von Daten von InterSystems IRIS nach Python. Alle Daten\u00fcbertragungsanfragen implementieren das Interface <code>isc.py.msg.DataRequest<\/code>, das die folgenden Eigenschaften bereitstellt:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variable<\/code> \u2014 die Python-Variable, in die die Daten geschrieben werden.<\/li>\n<li><code>Typ<\/code> \u2014 Typ der Variable: <code>dataframe<\/code> (pandas dataframe) oder <code>die Umwandlung von numerischen und textuellen Daten in die Formate<\/code>.<\/li>\n<li><code>Namespace<\/code> \u2014 Bereich, aus dem wir Daten erhalten. Das Paket <code>isc.py<\/code> muss in diesem Bereich verf\u00fcgbar sein. Dies kann ein Bereich ohne Unterst\u00fctzung f\u00fcr Produkte sein.<\/li>\n<\/ul>\n<p><\/p>\n<p>Basierend auf diesem Interface sind 4 Klassenanfragen implementiert:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.QueryRequest<\/code> \u2014 setzen Sie die Eigenschaft <code>Abfrage<\/code> zum \u00dcbertragen von SQL-Abfragen.<\/li>\n<li><code>isc.py.msg.ClassRequest<\/code> \u2014 setzen Sie die Eigenschaft <code>Klasse<\/code> zum \u00dcbertragen von Klassendaten.<\/li>\n<li><code>isc.py.msg.TableRequest<\/code> \u2014 setzen Sie die Eigenschaft <code>Tabelle<\/code> zum \u00dcbertragen von Tabellendaten.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code> \u2014 setzen Sie die Eigenschaft <code>Global<\/code> zum \u00dcbertragen von Globaldaten.<\/li>\n<\/ul>\n<p><\/p>\n<p>Sehen Sie sich im Testprozess die Aktivit\u00e4t an <code>RAW<\/code><header> <code>isc.py.msg.QueryRequest<\/code> wird in Aktion gezeigt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway in InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/f6a2a520594341b9d37110bcd24b1015.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"sohranenievosstanovlenie-python-konteksta\">Speichern\/Wiederherstellen des Python-Kontexts<\/h3>\n<p><\/p>\n<p>Schlie\u00dflich k\u00f6nnen wir den Python-Kontext in InterSystems IRIS speichern. Um dies zu tun, senden wir <code>isc.py.msg.SaveRequest<\/code> mit den Argumenten:<\/p>\n<p><\/p>\n<ul>\n<li><code>Maske<\/code> \u2014 Nur Variablen, die der Maske entsprechen, werden gespeichert. Unterst\u00fctzt werden <code>*<\/code> und <code>?<\/code>. Beispiel: <code>\"Data*, Figure?\"<\/code>. Standardm\u00e4\u00dfig erfolgt <code>*<\/code>.<\/li>\n<li><code>MaxLength<\/code> \u2014 Maximale L\u00e4nge der gespeicherten Variable. Wenn die Serialisierung der Variable l\u00e4nger ist, wird sie ignoriert. Setzen Sie 0, um Variablen beliebiger L\u00e4nge zu erhalten. Standardm\u00e4\u00dfig <code>$$$MaxStringLength<\/code>.<\/li>\n<li><code>Name<\/code> \u2014 Name des Kontexts (optional).<\/li>\n<li><code>Beschreibung<\/code> \u2014 Beschreibung des Kontexts (optional).<\/li>\n<\/ul>\n<p><\/p>\n<p>Gibt zur\u00fcck <code>Ens.StringResponse<\/code> c <code>Id<\/code> des gespeicherten Kontexts. Achten Sie w\u00e4hrend des Testprozesses auf die Aktivit\u00e4t <code>Kontext speichern<\/code>.<\/p>\n<p><\/p>\n<p>Entsprechende Anfrage <code>isc.py.msg.RestoreRequest<\/code> l\u00e4dt den Kontext aus InterSystems IRIS in Python:<\/p>\n<p><\/p>\n<ul>\n<li><code>ContextId<\/code> \u2014 Kontext-ID.<\/li>\n<li><code>Clear<\/code> \u2014 Kontext vor der Wiederherstellung l\u00f6schen.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"jupyter-notebook\">Jupyter Notebook<\/h1>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter Notebook<\/a><\/noindex> \u2014 dies ist eine Open-Source-Webanwendung, die es erlaubt, Notebooks zu erstellen, die Code, Visualisierungen und Text enthalten und diese zu ver\u00f6ffentlichen. Python Gateway erm\u00f6glicht es, BPL-Prozesse als Jupyter Notebook zu betrachten und zu bearbeiten. Bitte beachten Sie, dass derzeit der regul\u00e4re Python 3 Executor verwendet wird.<\/p>\n<p><\/p>\n<p>Diese Erweiterung geht davon aus, dass die Annotationen Python-Code enthalten und die Aktivit\u00e4tsnamen als vorhergehende \u00dcberschriften verwenden. Es ist jetzt m\u00f6glich, Gesch\u00e4ftsprozesse mit PythonGateway in Jupyter Notebook zu entwickeln. Folgendes ist m\u00f6glich: <\/p>\n<p><\/p>\n<ul>\n<li>Neue Gesch\u00e4ftsprozesse erstellen<\/li>\n<li>Gesch\u00e4ftsprozesse l\u00f6schen<\/li>\n<li>Neue Aktivit\u00e4ten erstellen<\/li>\n<li>Aktivit\u00e4ten \u00e4ndern<\/li>\n<li>Aktivit\u00e4ten l\u00f6schen<\/li>\n<\/ul>\n<p><\/p>\n<p>Hier <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/mZizgVtZ014\">Demo-Video<\/a><\/noindex>. Und einige Screenshots:<\/p>\n<p><\/p>\n<h2 id=\"provodnik-processov\">Prozess-Explorer<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway in InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/6da1aa0a026c34238c57f96e82742bb9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"redaktor-processa\">Prozess-Editor<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway in InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/651031fe9792cc1c5926aa386f4e37fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"ustanovka-1\">Installation<\/h2>\n<p><\/p>\n<ol>\n<li>Sie ben\u00f6tigen InterSystems IRIS 2019.2+.<\/li>\n<li>Installieren Sie PythonGateway v0.8+ (nur erforderlich, um <code>isc.py.util.Jupyter<\/code>, <code>isc.py.util.JupyterCheckpoints<\/code> und <code>isc.py.ens.ProcessUtils<\/code>).<\/li>\n<li>Aktualisieren Sie den ObjectScript-Code aus dem Repository.<\/li>\n<li>F\u00fchren Sie aus <code>do ##class(isc.py.util.Jupyter).Install()<\/code> und folgen Sie den Anweisungen.<\/li>\n<\/ol>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/tree\/master\/jupyter\">Dokumentation<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"vyvody\">Das DBMS Tarantool ist ein attraktives, zukunftstr\u00e4chtiges Produkt zur Erstellung von hochbelasteten Anwendungen.<\/h1>\n<p><\/p>\n<p>MLToolkit ist eine Sammlung von Werkzeugen, die darauf abzielt, Modelle und Transaktionsumgebungen zu integrieren, um die erstellten Modelle direkt in Ihren Gesch\u00e4ftsprozessen problemlos nutzen zu k\u00f6nnen. Python Gateway ist Teil von MLToolkit und bietet eine Integration mit der Programmiersprache Python, die es erm\u00f6glicht, beliebige maschinelle Lernalgorithmen, die in Python erstellt wurden (der Hauptarbeitsplatz vieler Data Scientists), zu orchestrieren und zahlreiche fertige Bibliotheken zu verwenden, um adaptive, robotergest\u00fctzte analytische AI\/ML-L\u00f6sungen auf der Plattform InterSystems IRIS schnell zu erstellen.<\/p>\n<p><\/p>\n<h1 id=\"ssylki\">Links<\/h1>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/473452\/\">Der vorherige Artikel<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openexchange.intersystems.com\/package\/PythonGateway\">Python Gateway<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/openexchange.intersystems.com\/package\/Python-Gateway-Samples\">Python Gateway-Beispiele<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/Convergent-Analytics\">Convergent-Analytics<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python 3.6.7 64 bit<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">Dokumentation und Kurse zu Python<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"mltoolkit\">MLToolkit<\/h1>\n<p><\/p>\n<p>Die MLToolkit-Benutzergruppe ist ein privates GitHub-Repository, das als Teil der Unternehmens-GitHub-Organisation von InterSystems erstellt wurde. Es richtet sich an externe Benutzer, die die MLToolkit-Komponenten, einschlie\u00dflich des Python Gateways, installieren, erkunden oder bereits nutzen. In der Gruppe sind eine Reihe von implementierten Anwendungsf\u00e4llen (mit Quellcode und Testdaten) aus den Bereichen Marketing, Produktion, Medizin und vielen anderen Branchen verf\u00fcgbar. Um der MLToolkit-Benutzergruppe beizutreten, senden Sie bitte eine kurze Nachricht per E-Mail an die folgende Adresse: <noindex><a rel=\"nofollow\" href=\"mailto:MLToolkit@intersystems.com?subject=MLToolkit%20user%20group&amp;body=Hello.%0A%0APlease%20add%20me%20to%20ML%20Toolkit%20user%20group%3A%0A%0A-%20GitHub%20username%3A%20%0A%0A-%20Name%3A%20%0A%0A-%20Company%3A%20%0A%0A-%20Position%3A%0A-%20Country%3A%20%0A%0A\">MLToolkit@intersystems.com<\/a><\/noindex> und geben Sie in Ihrer E-Mail die folgenden Informationen an:<\/p>\n<p><\/p>\n<ul>\n<li>GitHub-Benutzername<\/li>\n<li>Organisation (wo Sie arbeiten oder studieren)<\/li>\n<li>Position (Ihre tats\u00e4chliche Position in Ihrer Organisation, oder \"Student\", oder \"Freelancer\").<\/li>\n<li>Land<\/li>\n<\/ul>\n<p><\/p>\n<p>An diejenigen, die den Artikel gelesen und Interesse an den M\u00f6glichkeiten von InterSystems IRIS als Plattform f\u00fcr die Entwicklung oder Bereitstellung von Mechanismen f\u00fcr k\u00fcnstliche Intelligenz und maschinelles Lernen haben, bieten wir an, m\u00f6gliche Szenarien zu besprechen, die f\u00fcr Ihr Unternehmen von Interesse sein k\u00f6nnten. Wir sind bereit, die Bed\u00fcrfnisse Ihres Unternehmens zu analysieren und gemeinsam einen Aktionsplan zu erstellen; die Kontakt-E-Mail-Adresse unserer Expertengruppe f\u00fcr KI\/ML ist: <noindex><a rel=\"nofollow\" href=\"mailto:MLToolkit@intersystems.com\">MLToolkit@intersystems.com<\/a><\/noindex>.<\/p>\n<p>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/486984\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Python (\u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0440\u0435\u0434\u0430 \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 Data Scientists), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u044b\u0445, \u0440\u043e\u0431\u043e\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 AI\/ML-\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 InterSystems IRIS. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":41222,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-41221","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/python-gateway-v-intersystems-iris\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Python Gateway \u0432 InterSystems IRIS | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/python-gateway-v-intersystems-iris\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-06T17:42:46+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-06T17:42:46+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Python Gateway in InterSystems IRIS | ProHoster","description":"Dieser Artikel ist dem Python Gateway gewidmet \u2013 einem Community-Projekt mit offenem Quellcode f\u00fcr die Datenplattform InterSystems IRIS.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/python-gateway-v-intersystems-iris","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Python Gateway \u0432 InterSystems IRIS | ProHoster","og:description":"\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 Python Gateway \u2014 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438-\u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0434\u0430\u043d\u043d\u044b\u0445 InterSystems IRIS.","og:url":"https:\/\/prohoster.info\/de\/blog\/python-gateway-v-intersystems-iris","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-06T17:42:46+00:00","article:modified_time":"2020-02-06T17:42:46+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"41221","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 00:21:33","updated":"2022-09-30 00:32:37","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/41221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=41221"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/41221\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/41222"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=41221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=41221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=41221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}