{"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 widmet sich dem Python Gateway \u2013 einem Open-Source-Community-Projekt f\u00fcr die InterSystems IRIS-Datenplattform. Dieses Projekt erm\u00f6glicht die Orchestrierung beliebiger Machine-Learning-Algorithmen, die in Python entwickelt wurden (der Hauptsprache vieler Data Scientists), und die Nutzung zahlreicher fertiger Bibliotheken zur schnellen Erstellung adaptiver, automatisierter analytischer AI\/ML-L\u00f6sungen auf der InterSystems IRIS-Plattform. In diesem Artikel zeige ich, wie InterSystems IRIS Prozesse in Python orchestrieren, bidirektionalen Datenaustausch effizient durchf\u00fchren und intelligente Gesch\u00e4ftsprozesse erstellen kann.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"plan\">Gliederung<\/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 hochgradige Programmiersprache f\u00fcr allgemeine Zwecke, die darauf abzielt, die Produktivit\u00e4t der Entwickler und die Lesbarkeit des Codes zu erh\u00f6hen. In dieser Artikelreihe werde ich die M\u00f6glichkeiten der Anwendung der Sprache Python auf der InterSystems IRIS-Plattform erl\u00e4utern, wobei der Schwerpunkt dieses Artikels auf der Anwendung von Python als Sprache zur Erstellung und Anwendung von Machine-Learning-Modellen liegt.<\/p>\n<p><\/p>\n<p>Maschinenlernen (ML) ist eine Klasse von Methoden der k\u00fcnstlichen Intelligenz, deren charakteristisches Merkmal nicht das unmittelbare L\u00f6sen von Aufgaben ist, sondern das Lernen w\u00e4hrend der L\u00f6sung zahlreicher \u00e4hnlicher Probleme. <\/p>\n<p><\/p>\n<p>Algorithmen und Modelle des maschinellen Lernens werden immer verbreiteter. Daf\u00fcr gibt es viele Gr\u00fcnde, aber alles l\u00e4uft auf Verf\u00fcgbarkeit, Einfachheit und das Erreichen praktischer Ergebnisse hinaus. Ist Clusterbildung oder sogar die Netzwerkmodellierung eine neue Technologie? <\/p>\n<p><\/p>\n<p>Nat\u00fcrlich nicht, aber heutzutage ist es nicht mehr notwendig, Hunderttausende von Codezeilen 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 \u2013 w\u00e4hrend es noch keine vollst\u00e4ndig GUI-orientierten AI\/ML-Werkzeuge gibt, beobachten wir den gleichen Fortschritt, den wir bei vielen anderen Klassen von Informationssystemen, wie BI (von der Codierung bis zur Nutzung von Frameworks und GUI-basierten konfigurierbaren L\u00f6sungen), gesehen haben, auch in den Tools zur Erstellung von AI\/ML. Wir haben die Phase der Codeerstellung bereits hinter uns gelassen und nutzen heute Frameworks, um Modelle zu erstellen und zu trainieren.<\/p>\n<p><\/p>\n<p>Weitere Verbesserungen, wie die M\u00f6glichkeit, ein vortrainiertes Modell zu verbreiten, bei dem der Endbenutzer lediglich das Training des Modells mit seinen spezifischen Daten abschlie\u00dfen muss, erleichtern den Einstieg in die Anwendung von maschinellem Lernen. Diese Fortschritte machen das Erlernen von maschinellem Lernen sowohl f\u00fcr Fachleute als auch f\u00fcr Unternehmen insgesamt erheblich einfacher.<\/p>\n<p><\/p>\n<p>Auf der anderen Seite sammeln wir immer mehr Daten. Dank einer einheitlichen Datenplattform wie InterSystems IRIS kann all diese Informationen sofort aufbereitet und als Basisdaten f\u00fcr Modelle des maschinellen Lernens verwendet werden.<\/p>\n<p><\/p>\n<p>Der Umstieg auf die Cloud macht den Start von AI\/ML-Projekten einfacher als je zuvor. Wir k\u00f6nnen nur die Ressourcen konsumieren, 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>Wie sieht es jedoch mit den Ergebnissen aus? Hier wird es komplizierter. Es gibt viele Werkzeuge zum Erstellen von Modellen, \u00fcber die ich im Folgenden sprechen werde. Ein gutes Modell zu erstellen, ist nicht einfach, aber was kommt dann? Auch die Gewinnung von Nutzen f\u00fcr das Gesch\u00e4ft aus der Nutzung des Modells ist keine triviale Aufgabe. Das Kernproblem liegt im Unterscheiden von analytischen und transaktionalen Lasten sowie den Datenmodellen. Wenn wir ein Modell trainieren, tun wir dies in der Regel mit historischen Daten. Aber der Platz f\u00fcr das erstellte Modell liegt in der transaktionalen Datenverarbeitung. Was n\u00fctzt das beste Modell zur Erkennung von betr\u00fcgerischen Transaktionen, wenn wir es 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 neuen Eingangsdaten anwenden, damit unsere Gesch\u00e4ftsprozesse entsprechend den Prognosen, die das Modell erstellt hat, handeln k\u00f6nnen.<\/p>\n<p><\/p>\n<p>ML Toolkit \u2013 ein Set von Tools, das genau das Ziel hat: Modelle und Transaktionsumgebungen zusammenzuf\u00fchren, sodass die erstellten Modelle direkt in Ihren Gesch\u00e4ftsprozessen eingesetzt werden k\u00f6nnen. Der Python Gateway ist Teil des ML Toolkits und erm\u00f6glicht die Integration mit der Programmiersprache Python (\u00e4hnlich wie der R Gateway, der ebenfalls Teil des ML Toolkits ist und die Integration mit der Programmiersprache R erm\u00f6glicht).<\/p>\n<p><\/p>\n<h1 id=\"instrumentariy\">Werkzeugset<\/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, hochgradige Programmiersprache f\u00fcr allgemeine Zwecke. Der Hauptvorteil dieser Sprache ist die umfangreiche Bibliothek an mathematischen, ML- und AI-Bibliotheken. Wie ObjectScript ist es eine objektorientierte Sprache, jedoch wird alles dynamisch und nicht statisch definiert. Alles ist auch ein Objekt. Sp\u00e4tere Artikel setzen ein fl\u00fcchtiges Verst\u00e4ndnis der Sprache voraus. Wenn Sie mit dem Lernen beginnen m\u00f6chten, empfehle ich, mit <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">Dokumentation.<\/a><\/noindex>.<\/li>\n<li>F\u00fcr unsere kommenden \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 benutze <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/pycharm\/\">PyCharm<\/a><\/noindex>, aber im Allgemeinen gibt es viele <noindex><a rel=\"nofollow\" href=\"https:\/\/realpython.com\/python-ides-code-editors-guide\/\">eine Menge<\/a><\/noindex>. Wenn Sie Atelier verwenden, gibt es ein Eclipse-Plugin f\u00fcr Entwickler in Python. Bei der Verwendung von VS Code steht Ihnen eine Erweiterung f\u00fcr Python zur Verf\u00fcgung. <\/li>\n<li>Notebook: Anstelle einer IDE k\u00f6nnen Sie Ihre Skripte in Online-Notebooks schreiben und teilen. Das beliebteste davon 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 leistungsstarke Datenstrukturen und Analysetools.<\/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 basierend auf matplotlib.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/scikit-learn.org\/stable\/\">Sklearn<\/a><\/noindex> \u2014 Methoden des maschinellen Lernens.<\/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 im Rahmen der Gradient Boosting-Methode.<\/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 Netze.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/\">Tensorflow<\/a><\/noindex> \u2014 eine Plattform zur Erstellung von Modellen f\u00fcr maschinelles Lernen.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/pytorch.org\/\">PyTorch<\/a><\/noindex> \u2014 eine auf Python ausgerichtete Plattform zur Erstellung von Modellen f\u00fcr maschinelles Lernen.<\/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, Unternehmen effizienter und anpassungsf\u00e4higer zu gestalten. Dar\u00fcber hinaus wird die Entwicklung und Implementierung dieser Technologien heute einfacher. Beginnen Sie mit dem Studium von AI\/ML-Technologien und wie sie Ihrem Unternehmen beim Wachstum helfen k\u00f6nnen.<\/p>\n<p><\/p>\n<h1 id=\"ustanovka\">Installation von<\/h1>\n<p><\/p>\n<p>Es gibt mehrere M\u00f6glichkeiten, das Python Gateway zu installieren und zu verwenden:<\/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, um den Code herunterzuladen, ist die <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">Release-Seite<\/a><\/noindex>. Dort finden Sie getestete stabile Versionen, nehmen Sie einfach die neueste. Derzeit ist es 0.8, aber im Laufe der Zeit werden weitere erscheinen. Klonen oder laden Sie nicht das Repository herunter, sondern 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 zun\u00e4chst (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 Bereich mit Produktionen hoch. Falls Sie m\u00f6chten, dass der bestehende Bereich Produktionen unterst\u00fctzt, f\u00fchren Sie Folgendes aus: <code>write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1)<\/code>.<\/li>\n<li>Platzieren Sie <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-Instances. Die Bibliotheksdatei muss unter dem Pfad verf\u00fcgbar sein, der zur\u00fcckgegeben wird <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 verweist.<\/li>\n<li>\u00dcberpr\u00fcfen Sie, ob die Systemumgebungsvariable <code>PATH<\/code> die Variable enth\u00e4lt <code>PYTHONHOME<\/code> (oder das Verzeichnis, auf das sie verweist).<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"linux-debianubuntu\">Linux (Debian\/Ubuntu)<\/h3>\n<p><\/p>\n<ol>\n<li>Stellen Sie sicher, 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> um Umgebungsvariablen festzulegen.<\/li>\n<li>Bei Fehlern <code>undefined symbol: _Py_TrueStruct<\/code> setzen Sie die Einstellung <code>PythonLib<\/code>. Au\u00dferdem gibt es im <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme<\/a><\/noindex> 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 Umgebungsvariable <code>PATH<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Wenn Sie die Umgebungsvariablen ge\u00e4ndert haben, starten Sie Ihr InterSystems-Produkt neu.<\/p>\n<p><\/p>\n<h2 id=\"docker\">Docker<\/h2>\n<p><\/p>\n<p>Die Verwendung von Containern bietet eine Reihe von Vorteilen: <\/p>\n<p><\/p>\n<ul>\n<li>Portabilit\u00e4t<\/li>\n<li>Effizienz<\/li>\n<li>Isolierung<\/li>\n<li>Leichtgewichtigkeit<\/li>\n<li>Unver\u00e4nderlichkeit<\/li>\n<\/ul>\n<p><\/p>\n<p>Lesen Sie diese <noindex><a rel=\"nofollow\" href=\"https:\/\/community.intersystems.com\/post\/continuous-delivery-your-intersystems-solution-using-gitlab-part-v-why-containers\">Artikelserie<\/a><\/noindex> f\u00fcr weitere Informationen zur Verwendung von Docker mit InterSystems-Produkten. <\/p>\n<p><\/p>\n<p>Alle Builds des Python Gateway 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>Um das Docker-Image zu erstellen, f\u00fchren Sie im Wurzelverzeichnis des Repositorys aus: <code>docker build --force-rm --tag intersystemscommunity\/irispy:latest .<\/code>.<br \/>\nStandardm\u00e4\u00dfig wird das Image basierend auf dem Image erstellt <code>store\/intersystems\/iris-community:2019.4.0.383.0<\/code>, Sie k\u00f6nnen dies jedoch \u00e4ndern, indem Sie die Variable <code>IMAGE<\/code>.<br \/>\nF\u00fcr den Build aus InterSystems IRIS f\u00fchren Sie aus: `docker build --build-arg IMAGE=store\/intersystems\/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity\/irispy:latest`.<\/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 der InterSystems IRIS Community Edition basierendes Image verwenden, m\u00fcssen Sie m\u00f6glicherweise keinen Schl\u00fcssel 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 in einem tempor\u00e4ren Verzeichnis. M\u00f6glicherweise m\u00f6chten Sie diesen Pfad in ein eingebundenes Verzeichnis \u00e4ndern. Bearbeiten Sie dazu die Einstellung <code>WorkingDir<\/code> und geben Sie das montierte Verzeichnis an.<\/li>\n<li>Um auf das Terminal zuzugreifen, f\u00fchren Sie aus: <code>docker exec -it irispy sh<\/code>.<\/li>\n<li>Zugriff auf das System Management Portal mit dem 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\">Installation \u00fcberpr\u00fcfen<\/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 InterSystems IRIS Terminal 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 ausgegeben werden <code>Hallo<\/code> \u2014 der Wert der Python-Variablen <code>x<\/code>. Wenn der Status zur\u00fcckgegeben wird <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\">Readme \u2014 Abschnitt zur Fehlerbehebung<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"api\">API<\/h1>\n<p><\/p>\n<p>Der Python Gateway ist installiert und Sie haben sichergestellt, dass er funktioniert. Es ist Zeit, ihn zu nutzen!<br \/>\nDie Hauptschnittstelle zu Python ist <code>isc.py.Main<\/code>. Sie bietet die folgenden Methoden-Gruppen an (alle geben zur\u00fcck <code>%Status<\/code>):<\/p>\n<p><\/p>\n<ul>\n<li>Codeausf\u00fchrung<\/li>\n<li>Daten\u00fcbergabe<\/li>\n<li>Hilfsfunktionen<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"ispolnenie-koda\">Codeausf\u00fchrung<\/h2>\n<p><\/p>\n<p>Diese Methoden erm\u00f6glichen die Ausf\u00fchrung beliebigen Python-Codes.<\/p>\n<p><\/p>\n<h3 id=\"simplestring\">SimpleString<\/h3>\n<p><\/p>\n<p><code>SimpleString<\/code> \u2014 ist die Hauptmethode. Sie akzeptiert 4 optionale Argumente:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 der auszuf\u00fchrende Code. Zeilenumbruch-Zeichen: <code>$c(10)<\/code>.<\/li>\n<li><code>returnVariable<\/code> \u2014 der Name der zur\u00fcckzugebenden Variablen.<\/li>\n<li><code>serialization<\/code> \u2014 wie serialisieren <code>returnVariable<\/code>. 0 \u2014 string (Standardwert), 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>Oben 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> den Wert <code>Hallo<\/code> und m\u00f6chten den Wert der Python-Variable <code>x<\/code> in einer 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 \/>\nIn der Plattform InterSystems IRIS sind Strings auf 3.641.144 Zeichen begrenzt. Wenn Sie einen l\u00e4ngeren Code ausf\u00fchren m\u00f6chten, m\u00fcssen Sie Streams verwenden.<br \/>\nEs werden zwei Argumente akzeptiert:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 Ein String oder ein Python-Code-Stream zur Ausf\u00fchrung.<\/li>\n<li><code>variable<\/code> \u2014 (optional) weist das Ergebnis der Ausf\u00fchrung dieser Python-Variablen zu. <code>code<\/code> Beispiel verwenden:<\/li>\n<\/ul>\n<p><\/p>\n<p>set sc = ##class(isc.py.Main).ExecuteCode(\"2*3\", \"y\").<\/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>\u00dcbertragen Sie Daten zwischen Python und InterSystems IRIS. <code>y<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"peredacha-dannyh\">Daten\u00fcbergabe<\/h2>\n<p><\/p>\n<p>Python -&gt; InterSystems IRIS<\/p>\n<p><\/p>\n<h3 id=\"python---intersystems-iris\">Es gibt vier M\u00f6glichkeiten, den Wert einer Python-Variablen in InterSystems IRIS zu erhalten, abh\u00e4ngig von der ben\u00f6tigten Serialisierung:<\/h3>\n<p><\/p>\n<p>String<\/p>\n<p><\/p>\n<ul>\n<li><code>f\u00fcr einfache Datentypen und Debugging.<\/code> Repr<\/li>\n<li><code>zur Speicherung einfacher Objekte und f\u00fcr Debugging.<\/code> f\u00fcr einfaches Manipulieren von Daten auf der Seite von InterSystems IRIS.<\/li>\n<li><code>JSON<\/code> Pickle<\/li>\n<li><code>zur Speicherung von Objekten.<\/code> Diese Methoden erm\u00f6glichen es, Variablen aus Python als Strings oder Streams zu beziehen.<\/li>\n<\/ul>\n<p><\/p>\n<p>GetVariable(variable, serialization, .stream, useString)<\/p>\n<p><\/p>\n<ul>\n<li><code>\u2014 erhalten<\/code> stream. <code>serialization<\/code> Variable <code>variable<\/code> in <code>Wenn<\/code>useString <code>gleich 1 ist und die Serialisierung in einen String erfolgt, wird ein String und kein Stream zur\u00fcckgegeben.<\/code> GetVariableJson(variable, .stream, useString)<\/li>\n<li><code>\u2014 erh\u00e4lt die JSON-Serialisierung der Variablen.<\/code> GetVariablePickle(variable, .stream, useString, useDill)<\/li>\n<li><code>GetVariablePickle(variable, .stream, useString, useDill)<\/code> - erhalten Sie die Pickle (oder Dill) Serialisierung einer Variablen.<\/li>\n<\/ul>\n<p><\/p>\n<p>Lassen Sie uns versuchen, 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>Wir laden 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>Liste<\/code>) aus einer SQL-Anfrage und speichert ihn in einer Python-Variable. <code>variable<\/code>. Das Paket <code>isc.py<\/code> muss im Namensraum <code>namespace<\/code> verf\u00fcgbar sein, wo die Anfrage ausgef\u00fchrt wird.<\/li>\n<li><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 l\u00e4dt Daten eines Globals <code>global<\/code> aus dem Subskript <code>start<\/code> bis zu <code>end<\/code> in Python als einen Variablentyp <code>type<\/code>: <code>Liste<\/code>, oder pandas. <code>dataframe<\/code>Die Beschreibung der optionalen Argumente <code>mask<\/code> und <code>labels<\/code> ist in der Klassen- und Repository-Dokumentation verf\u00fcgbar. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Daten\u00fcbertragungsdokumente<\/a><\/noindex>.<\/li>\n<li><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 l\u00e4dt Daten einer Klasse <code>class<\/code> von ID <code>start<\/code> bis zu <code>end<\/code> in Python als einen Variablentyp <code>type<\/code>: <code>Liste<\/code>, oder pandas. <code>dataframe<\/code>. <code>properties<\/code> \u2014 eine Liste (getrennt durch Kommas) von Klasseneigenschaften, die in den Datensatz geladen werden sollen. Masken werden unterst\u00fctzt. <code>*<\/code> und <code>?<\/code>Standardm\u00e4\u00dfig \u2014 <code>*<\/code> (alle Eigenschaften). Die Eigenschaft <code>%%CLASSNAME<\/code> wird ignoriert.<\/li>\n<li><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 l\u00e4dt Tabellendaten <code>Tabelle<\/code> von ID <code>start<\/code> bis zu <code>end<\/code> in Python.<\/li>\n<\/ul>\n<p><\/p>\n<p><code>ExecuteQuery<\/code> \u2014 ist universell (jeder g\u00fcltige SQL-Befehl wird an Python \u00fcbergeben). Allerdings, <code>ExecuteGlobal<\/code> und seine Wrapper <code>ExecuteClass<\/code> und <code>ExecuteTable<\/code> arbeiten mit einer Reihe von Einschr\u00e4nkungen. Sie sind deutlich schneller (3-5 Mal schneller als 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\">Daten\u00fcbertragungsdokumente<\/a><\/noindex>.<br \/>\nAlle diese Methoden unterst\u00fctzen den Datentransfer 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 \u00fcbertr\u00e4gt die Ergebnisse einer beliebigen g\u00fcltigen SQL-Abfrage an Python. Dies ist die langsamste Methode zur Daten\u00fcbertragung. Verwenden Sie sie, wenn <code>ExecuteGlobal<\/code> und seine Wrapper 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>Liste<\/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 \u00fcbertr\u00e4gt das Globalobjekt an 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>Liste<\/code> oder Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 der erste Subscript des Globals. Pflichtfeld <code>%Integer<\/code>.<\/li>\n<li><code>end<\/code> \u2014 der letzte Subscript des Globals. Pflichtfeld <code>%Integer<\/code>.<\/li>\n<li><code>mask<\/code> \u2014 die Maskierung der Globalwerte. 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 unver\u00e4ndert \u00fcbertragen.<\/li>\n<li><code>-<\/code> Wert \u00fcberspringen.<\/li>\n<li><code>b<\/code> \u2014 Boolescher Typ (<code>0<\/code> \u2014 <code>False<\/code>, alles andere \u2014 <code>True<\/code>).<\/li>\n<li><code>d<\/code> \u2014 Datum (aus $horolog, auf Windows ab 1970, auf Linux ab 1900).<\/li>\n<li><code>t<\/code> \u2014 Zeit ($horolog, Sekunden nach Mitternacht).<\/li>\n<li><code>m<\/code> \u2014 Zeitstempel (im Format JAHRES-MONAT-TAG STUNDE:MINUTE:SEKUNDE).<\/li>\n<\/ul>\n<\/li>\n<li><code>labels<\/code> \u2014 %List der Spaltenbezeichnungen. Das erste Element ist der Name des Unterskripts.<\/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 um <code>ExecuteGlobal<\/code>. Bereitet basierend auf der Klassendefinition den Aufruf 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>Liste<\/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 (getrennt durch Kommas) von Klasseneigenschaften, die in den Datensatz geladen werden sollen. Masken werden unterst\u00fctzt. <code>*<\/code> und <code>?<\/code>Standardm\u00e4\u00dfig \u2014 <code>*<\/code> (alle Eigenschaften). Die Eigenschaft <code>%%CLASSNAME<\/code> wird 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 unver\u00e4ndert \u00fcbergeben, au\u00dfer den Eigenschaften der Typen <code>%Date<\/code>, <code>%Uhrzeit<\/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 um <code>ExecuteClass<\/code>. \u00dcbertr\u00e4gt den Tabellennamen in den Klassennamen und ruft ihn auf <code>ExecuteClass<\/code>. 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 unver\u00e4ndert 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 \u00fcber &gt;0,01 Sekunden).<\/li>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> und <code>ExecuteTable<\/code> arbeiten mit Globals mit dieser Struktur: <code>^global(key) = $lb(prop1, prop2, ..., propN)<\/code> wobei <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>%Date<\/code> entspricht dem Bereich <code>mktime<\/code> und h\u00e4ngt vom Betriebssystem 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 \u00fcbertragen, oder verwenden Sie pandas dataframe, da diese Einschr\u00e4nkung nur f\u00fcr die Liste gilt.<\/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 die Variable 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 M\u00f6glichkeiten 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 Globals 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, weil \"globalKey\" - Name des Subskripts\n\/\/ %%CLASSNAME wird \u00fcbersprungen\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 Serialisierungsdauer.<\/li>\n<li><code>GetVariableDefined(variable, .defined)<\/code> \u2014 Ist die Variable definiert?<\/li>\n<li><code>GetVariableType(variable, .type)<\/code> \u2014 Erhalte den Variablenklassentyp.<\/li>\n<li><code>GetStatus()<\/code> \u2014 Erhalte und entferne die letzte Ausnahme auf der Python-Seite.<\/li>\n<li><code>GetModuleInfo(module, .imported, .alias)<\/code> \u2014 Erhalte die Modulvariable und den Importstatus.<\/li>\n<li><code>GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)<\/code> \u2014 Erhalte Informationen zur Funktion.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"interoperabelnost\">Interoperabilit\u00e4t<\/h1>\n<p><\/p>\n<p>Sie haben gelernt, wie man das Python Gateway aus dem Terminal aufruft. Jetzt werden wir beginnen, 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 aus Python zu laden und abzurufen<\/li>\n<\/ul>\n<p><\/p>\n<p>Im Grunde genommen ist die Python-Operation eine Abstraktionsschicht \u00fcber <code>isc.py.Main<\/code>. Die Operation <code>isc.py.ens.Operation<\/code> erm\u00f6glicht die Interaktion mit dem Python-Prozess aus Produkten von InterSystems IRIS. Es werden f\u00fcnf Anfragen unterst\u00fctzt:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.ExecutionRequest<\/code> zum Ausf\u00fchren von Python-Code. Es gibt zur\u00fcck <code>isc.py.msg.ExecutionResponse<\/code> mit dem Ergebnis der Ausf\u00fchrung und Werten der angeforderten Variablen.<\/li>\n<li><code>isc.py.msg.StreamExecutionRequest<\/code> zum Ausf\u00fchren von Python-Code. Es gibt zur\u00fcck <code>isc.py.msg.StreamExecutionResponse<\/code> mit dem Ergebnis der Ausf\u00fchrung und Werten der angeforderten Variablen. \u00c4hnlich <code>isc.py.msg.ExecutionRequest<\/code>, jedoch akzeptiert und liefert Str\u00f6me anstelle von Zeichenfolgen.<\/li>\n<li><code>isc.py.msg.QueryRequest<\/code> zum \u00dcbermitteln des Ergebnisses der SQL-Abfrage. Es 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> zur \u00dcbertragung von Daten f\u00fcr Global-\/Klassentabelle. 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>Dar\u00fcber hinaus, <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>. Er kann verwendet werden, um Funktionen, Module, Klassen usw. zu laden. Er 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 seinen 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 Abrufen von Annotationen aus Aktivit\u00e4ten mithilfe von Variablen.<\/li>\n<li><code>isc.py.util.BPEmulator<\/code> erm\u00f6glicht einfaches Testen von Gesch\u00e4ftsprozessen mit Python. Es kann einen Gesch\u00e4ftsprozess (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) verwenden.<\/code> um den Aktivit\u00e4tsannotationswert anhand seines Namens zu erhalten. Die Aktivit\u00e4tsannotation kann Variablen enthalten, die auf der Seite von InterSystems IRIS vor der \u00dcbergabe an Python berechnet werden. Hier ist die Syntax f\u00fcr die Variablenersetzung:<\/p>\n<p><\/p>\n<ul>\n<li><code>${class:method:arg1:...:argN}<\/code> \u2014 Aufruf einer Methode<\/li>\n<li><code>#{expr}<\/code> \u2014 Ausf\u00fchrung von Code in ObjectScript.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ein Beispiel ist im Testgesch\u00e4ftsprozess verf\u00fcgbar <code>isc.py.test.Process<\/code>, zum Beispiel in der Aktivit\u00e4t <code>Korrelationsmatrix: Diagramm<\/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 WorkDirectory-Attribut des Objekts zur\u00fcck <code>prozess<\/code>, das eine Instanz der Klasse ist <code>isc.py.test.Process<\/code> , d.h. des aktuellen Gesch\u00e4ftsprozesses.<\/li>\n<li><code>${%PopulateUtils:Integer:1:100}<\/code> die Methode <code>Ganzzahl<\/code> der Klasse <code>%PopulateUtils<\/code>, indem Argumente \u00fcbergeben werden <code>1<\/code> und <code>100<\/code>, die eine zuf\u00e4llige Ganzzahl 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>Testprodukte und der Testgesch\u00e4ftsprozess sind standardm\u00e4\u00dfig als Teil des Python Gateway verf\u00fcgbar. Um sie zu verwenden:<\/p>\n<p><\/p>\n<ol>\n<li>F\u00fchren Sie im OS-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> um Testdaten zu f\u00fcllen.<\/li>\n<li>Starten Sie das Produkt <code>isc.py.test.Production<\/code>.<\/li>\n<li>Senden Sie eine Anfrage vom Typ <code>Ens.Request<\/code> in <code>isc.py.test.Process<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Lassen Sie uns sehen, wie alles zusammen funktioniert. \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>Verwendete Anfrage <code>isc.py.msg.ExecutionRequest<\/code>, hier sind die Eigenschaften:<\/p>\n<p><\/p>\n<ul>\n<li><code>Code<\/code> \u2014 Python-Code.<\/li>\n<li><code>SeparateLines<\/code> \u2014 Soll der Code f\u00fcr die Ausf\u00fchrung in Zeilen unterteilt werden? <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 ist nur zur Verarbeitung <code>def<\/code> und \u00e4hnlicher mehrzeiliger Ausdr\u00fccke gedacht. Standardm\u00e4\u00dfig <code>0<\/code>.<\/li>\n<li><code>Variablen<\/code> \u2014 eine durch Kommas getrennte Liste von Variablen, die zur Antwort hinzugef\u00fcgt werden.<\/li>\n<li><code>Serialization<\/code> \u2014 Wie man die Variablen serialisiert, die wir zur\u00fcckgeben m\u00f6chten. Optionen: <code>Str<\/code>, <code>zur Speicherung einfacher Objekte und f\u00fcr Debugging.<\/code>, <code>JSON<\/code>, <code>zur Speicherung von Objekten.<\/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 die Standardwerte verwenden. Wir setzen sie durch den Aufruf <code>process.GetAnnotation(\"Import pandas\")<\/code>, der zur Laufzeit die Annotation nach der Ausf\u00fchrung des Variablenersatzes zur\u00fcckgibt. Am Ende wird der Code <code>import pandas as pd<\/code> an Python \u00fcbergeben. <code>GetAnnotation<\/code> kann n\u00fctzlich sein, um mehrzeilige Python-Skripte zu erhalten, aber es gibt keine Einschr\u00e4nkungen f\u00fcr diese Methode zur Codegewinnung. Sie k\u00f6nnen die Eigenschaft <code>Code<\/code> auf jede f\u00fcr Sie geeignete Weise setzen.<\/p>\n<p><\/p>\n<h3 id=\"poluchenie-peremennyh\">Abrufen 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 in Python und extrahiert die Variable <code>corrmat<\/code> zur\u00fcck in InterSystems IRIS im JSON-Format, indem er die Anfrageeigenschaften festlegt:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variablen<\/code>: <code>\"corrmat\"<\/code><\/li>\n<li><code>Serialization<\/code>: <code>\"JSON\"<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Wir k\u00f6nnen die Ergebnisse in 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 BPs ben\u00f6tigen, kann er so abgerufen werden: <code>callresponse.Variables.GetAt(\"corrmat\")<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh-1\">Daten\u00fcbergabe<\/h3>\n<p><\/p>\n<p>Als N\u00e4chstes sprechen wir \u00fcber die Daten\u00fcbertragung von InterSystems IRIS nach Python, alle Daten\u00fcbertragungsanfragen realisieren 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>Type<\/code> \u2014 der Typ der Variable: <code>dataframe<\/code> (pandas dataframe) oder <code>Liste<\/code>.<\/li>\n<li><code>Namespace<\/code> \u2014 der Bereich, aus dem wir die Daten holen. Das Paket <code>isc.py<\/code> muss in diesem Bereich verf\u00fcgbar sein. Es kann sich um einen Bereich ohne Unterst\u00fctzung f\u00fcr Produkte handeln.<\/li>\n<\/ul>\n<p><\/p>\n<p>Auf Basis dieses Interfaces wurden 4 Klassen von Anfragen implementiert:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.QueryRequest<\/code> \u2014 setzen Sie die Eigenschaft <code>Query<\/code> f\u00fcr die \u00dcbertragung der SQL-Abfrage.<\/li>\n<li><code>isc.py.msg.ClassRequest<\/code> \u2014 setzen Sie die Eigenschaft <code>Class<\/code> f\u00fcr die \u00dcbertragung der Klassendaten.<\/li>\n<li><code>isc.py.msg.TableRequest<\/code> \u2014 die Eigenschaft setzen <code>Tabelle<\/code> f\u00fcr die \u00dcbertragung von Tabellendaten.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code> \u2014 die Eigenschaft setzen <code>Global<\/code> f\u00fcr die \u00dcbertragung von Globaldaten.<\/li>\n<\/ul>\n<p><\/p>\n<p>Im Testprozess sehen Sie die Aktivit\u00e4t <code>RAW<\/code>, wobei <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, dazu senden wir <code>isc.py.msg.SaveRequest<\/code> mit Argumenten:<\/p>\n<p><\/p>\n<ul>\n<li><code>Maske<\/code> \u2014 Es werden nur Variablen gespeichert, die der Maske entsprechen. Unterst\u00fctzt werden <code>*<\/code> und <code>?<\/code>. Beispiel: <code>\"Data*, Figure?\"<\/code>. Standardm\u00e4\u00dfig <code>*<\/code>.<\/li>\n<li><code>Maximall\u00e4nge<\/code> \u2014 Maximale L\u00e4nge der gespeicherten Variablen. 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 Kontextname (optional).<\/li>\n<li><code>Beschreibung<\/code> \u2014 Kontextbeschreibung (optional).<\/li>\n<\/ul>\n<p><\/p>\n<p>Gibt zur\u00fcck <code>Ens.StringResponse<\/code> mit <code>Id<\/code> des gespeicherten Kontexts. Im Testprozess \u00fcberpr\u00fcfen Sie 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 den Kontext vor der Wiederherstellung zur\u00fccksetzen.<\/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 erm\u00f6glicht, Notebooks zu erstellen, die Code, Visualisierungen und Text enthalten, und diese zu ver\u00f6ffentlichen. Der Python Gateway erm\u00f6glicht die Anzeige und Bearbeitung von BPL-Prozessen in Form von Jupyter Notebooks. Bitte beachten Sie, dass derzeit der Standard-Python 3 Executor verwendet wird.<\/p>\n<p><\/p>\n<p>Diese Erweiterung geht davon aus, dass die Anmerkungen Python-Code enthalten und Aktivit\u00e4tsnamen als vorhergehende \u00dcberschriften verwenden. Jetzt k\u00f6nnen Sie Gesch\u00e4ftsprozesse mit PythonGateway im Jupyter Notebook 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 von<\/h2>\n<p><\/p>\n<ol>\n<li>Sie ben\u00f6tigen InterSystems IRIS 2019.2 oder h\u00f6her.<\/li>\n<li>Installieren Sie PythonGateway v0.8 oder h\u00f6her (nur erforderlich <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 <code>do ##class(isc.py.util.Jupyter).Install()<\/code> aus 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\">Fazit<\/h1>\n<p><\/p>\n<p>MLToolkit \u2014 ein Set von Werkzeugen, das darauf abzielt, Modelle und Transaktionsumgebungen zu vereinen, damit die erstellten Modelle leicht in Ihre Gesch\u00e4ftsprozesse integriert werden k\u00f6nnen. Das Python Gateway ist Teil von MLToolkit und erm\u00f6glicht die Integration mit der Programmiersprache Python, sodass Sie beliebige in Python entwickelte Machine-Learning-Algorithmen orchestrieren k\u00f6nnen (die Hauptumgebung f\u00fcr viele Data Scientists) und zahlreiche vorgefertigte Bibliotheken nutzen k\u00f6nnen, um schnell anpassbare, automatisierte analytische AI\/ML-L\u00f6sungen auf der InterSystems IRIS-Plattform 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\">Beispiele f\u00fcr Python Gateway<\/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-Nutzergruppe ist ein privates GitHub-Repository, das als Teil der Unternehmens-GitHub-Organisation InterSystems erstellt wurde. Diese Gruppe richtet sich an externe Nutzer, die Komponenten von MLToolkit, einschlie\u00dflich des Python Gateways, installieren, erforschen oder bereits verwenden. In der Gruppe sind mehrere umgesetzte Anwendungsf\u00e4lle (mit Quellcode und Testdaten) aus den Bereichen Marketing, Produktion, Medizin und vielen anderen Branchen verf\u00fcgbar. Um der Nutzergruppe ML Toolkit beizutreten, senden Sie bitte eine kurze 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 folgende Informationen an:<\/p>\n<p><\/p>\n<ul>\n<li>GitHub-Benutzername<\/li>\n<li>Organisation (in der Sie arbeiten oder studieren)<\/li>\n<li>Position (Ihre tats\u00e4chliche Position in Ihrer Organisation, oder \"Student\", oder \"Freiberufler\").<\/li>\n<li>Land<\/li>\n<\/ul>\n<p><\/p>\n<p>An alle, die den Artikel gelesen und Interesse an den M\u00f6glichkeiten von InterSystems IRIS als Plattform f\u00fcr die Entwicklung oder das Hosting von Mechanismen f\u00fcr k\u00fcnstliche Intelligenz und maschinelles Lernen haben, bieten wir an, relevante Szenarien f\u00fcr Ihr Unternehmen zu diskutieren. Wir analysieren gerne die Bed\u00fcrfnisse Ihres Unternehmens und definieren gemeinsam einen Aktionsplan; die E-Mail-Adresse unseres Expertenteams f\u00fcr AI\/ML lautet: <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 4.9.10 - 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. \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\" \/>\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) 4.9.10\" \/>\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. \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\" \/>\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 widmet sich dem Python Gateway \u2013 einem Open-Source-Community-Projekt f\u00fcr die InterSystems IRIS-Datenplattform. Dieses Projekt erm\u00f6glicht die Orchestrierung beliebiger Algorithmen f\u00fcr maschinelles Lernen, die in Python (der Hauptsprache f\u00fcr viele Data Scientists) erstellt wurden, sowie die Nutzung zahlreicher vorgefertigter Bibliotheken zur schnellen Erstellung von anpassungsf\u00e4higen, automatisierten analytischen AI\/ML-L\u00f6sungen auf der InterSystems IRIS-Plattform. In diesem Artikel zeige ich, wie man","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. \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","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"},"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}]}}