{"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\/et\/blog\/python-gateway-v-intersystems-iris","title":{"rendered":"Python Gateway InterSystems IRIS-s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>See artikkel on p\u00fchendatud Python Gateway'ile \u2014 avatud l\u00e4htekoodiga kogukonnaprojektile InterSystems IRIS andmeplatvormile. See projekt v\u00f5imaldab orkestreerida mis tahes masin\u00f5ppe algoritme, mis on loodud Pythonis (peamine keskkond paljude andmeteadlaste jaoks), kasutades arvukalt valmis teeke paindlike, robotiseeritud anal\u00fc\u00fctiliste AI\/ML lahenduste kiireks loomiseks InterSystems IRIS platvormil. Selles artiklis n\u00e4itan, kuidas InterSystems IRIS saab orkestreerida protsesse Pythoni keeles, efektiivselt korraldada andmete kahepoolset edastamist ja luua intelligentseid \u00e4riprotsesse.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"plan\">Plaani<\/h1>\n<p><\/p>\n<ol>\n<li>Sissejuhatus.<\/li>\n<li>T\u00f6\u00f6riistakomplekt.<\/li>\n<li>Paigaldamine.<\/li>\n<li>API.<\/li>\n<li>Interoperatiivsusus.<\/li>\n<li>Jupyter Notebook.<\/li>\n<li>J\u00e4reldused.<\/li>\n<li>Lingid.<\/li>\n<li>MLToolkit.<\/li>\n<\/ol>\n<p><\/p>\n<h1 id=\"vvedenie\">Sissejuhatus<\/h1>\n<p><\/p>\n<p>Python on k\u00f5rgema taseme \u00fcldotstarbeline programmeerimiskeel, mis on suunatud arendaja tootlikkuse ja koodi loetavuse parandamisele. Selles artiklite sarjas r\u00e4\u00e4gin Python'i rakendamise v\u00f5imalustest InterSystems IRIS platvormil, keskendudes peamiselt Python'i kasutamisele masin\u00f5ppe mudelite loomisel ja rakendamisel.<\/p>\n<p><\/p>\n<p>Masin\u00f5pe (ML) on tehisintellekti meetodite klass, mille iseloomulikuks tunnuseks on \u00fclesande otsese lahendamise v\u00f5imaluse asemel sarnaste \u00fclesannete lahendamine \u00f5ppimise kaudu. <\/p>\n<p><\/p>\n<p>Masin\u00f5ppe algoritmid ja mudelid saavad \u00fcha enam levinud. Selle p\u00f5hjuseid on palju, kuid k\u00f5ik taandub kergusele, lihtsusele ja praktilise tulemuse saavutamisele. Kas klasterdamine v\u00f5i isegi n\u00e4rviv\u00f5rgu modelleerimine on uus tehnoloogia? <\/p>\n<p><\/p>\n<p>Muidugi mitte, kuid praegu pole enam vaja kirjutada sadu tuhandeid ridu koodi, et k\u00e4ivitada \u00fcks mudel, ja mudelite loomise ja rakendamise kulud v\u00e4henevad j\u00e4rjest enam.<\/p>\n<p><\/p>\n<p>T\u00f6\u00f6riistad arenevad \u2014 kuigi meil pole t\u00e4ielikult GUI-orienteeritud AI\/ML t\u00f6\u00f6riistu, siis areng, mida oleme t\u00e4heldanud paljude teiste infos\u00fcsteemide klassidega, n\u00e4iteks BI (koodikirjutamisest raamistike ja GUI-orienteeritud konfigureeritavate lahenduste kasutamiseni), toimub samuti AI\/ML loomise t\u00f6\u00f6riistades. Oleme juba \u00fcletanud koodikirjutamise etapi ja t\u00e4na kasutame mudelite loomise ja \u00f5petamise raamistikke.<\/p>\n<p><\/p>\n<p>Teised t\u00e4iustused, nagu eel\u00f5ppemudeli levitamise v\u00f5imalus, kus l\u00f5ppkasutaja peab lihtsalt l\u00f5petama mudeli treenimise oma spetsiifiliste andmete peal, lihtsustavad masin\u00f5ppe rakenduse alustamist. Need saavutused muudavad masin\u00f5ppe \u00f5ppimise oluliselt lihtsamaks nii spetsialistide kui ka ettev\u00f5tete jaoks tervikuna.<\/p>\n<p><\/p>\n<p>Teisest k\u00fcljest kogume j\u00e4rjest rohkem andmeid. \u00dchtse andmeplatvormi, nagu InterSystems IRIS, abil saab kogu see teave koheselt ette valmistada ja kasutada masin\u00f5ppe mudelite l\u00e4htedata.<\/p>\n<p><\/p>\n<p>Pilve \u00fclemineku t\u00f5ttu on AI\/ML-projektide k\u00e4ivitamine lihtsam kui kunagi varem. Saame kasutada ainult neid ressursse, mis meile vajalikud on. Veelgi enam, t\u00e4nu pilveplatvormide pakutavale paralleelsusele suudame s\u00e4\u00e4sta kulutatud aega.<\/p>\n<p><\/p>\n<p>Aga kuidas on tulemustega? Siin l\u00e4heb k\u00f5ik keeruliseks. On palju t\u00f6\u00f6riistu mudelite ehitamiseks, millest ma r\u00e4\u00e4gin hiljem. Hea mudeli ehitamine pole lihtne, aga mis edasi? Tulu saamine mudeli kasutamisest \u00e4ris on samuti keeruline \u00fclesanne. Probleemi juured peituvad anal\u00fc\u00fctiliste ja tehingute koormate ning andmemudelite lahendamises. Kui treenime mudelit, teeme seda tavaliselt ajalooliste andmete peal. Ent ehitatud mudeli koht on tehinguandmete t\u00f6\u00f6tlemises. Mis kasu on parimast petukaupade tuvastamise mudelist, kui k\u00e4ivitame seda ainult kord p\u00e4evas? Petised on raha juba ammu kaasa v\u00f5tnud. Me peame treenima mudelit ajalooliste andmete peal, aga me peame seda rakendama ka reaalajas uute saabuvate andmete peal, et meie \u00e4ri protsessid saaksid toimida vastavalt mudeli tehtud prognoosidele.<\/p>\n<p><\/p>\n<p>ML Toolkit on t\u00f6\u00f6riistade komplekt, mille eesm\u00e4rk on just see: mudelite ja tehingu keskkonna \u00fchendamine, et ehitatud mudeleid saaks h\u00f5lpsasti teie \u00e4riprotsessides kasutada. Python Gateway on osa ML Toolkit-st ja tagab integreerimise Pythoniga (sarnaselt R Gateway-ga, mis koos ML Toolkit-iga tagab integreerimise R-iga).<\/p>\n<p><\/p>\n<h1 id=\"instrumentariy\">T\u00f6\u00f6riistakomplekt<\/h1>\n<p><\/p>\n<p>Enne kui j\u00e4tkame, tahaksin tutvustada m\u00f5ningaid Python'i t\u00f6\u00f6riistu ja raamatukogusid, mida me hiljem kasutame.<\/p>\n<p><\/p>\n<h2 id=\"tehnologii\">Tehnoloogiad<\/h2>\n<p><\/p>\n<ul>\n<li>Python on t\u00f5lgendatav, k\u00f5rgema taseme \u00fcldotstarbeline programmeerimiskeel. Keele peamine eelis on suur matemaatika, ML ja AI raamatukogu. Nagu ObjectScript, on see objektorienteeritud keel, kuid k\u00f5ik m\u00e4\u00e4ratakse d\u00fcnaamiliselt, mitte staatiliselt. Samuti on k\u00f5ik objekt. Hilisemad artiklid eeldavad, et teil on keele kohta pinnapealne tutvustus. Kui soovite alustada \u00f5ppimist, soovitan alustada <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">dokumentatsioon<\/a><\/noindex>.<\/li>\n<li>Meie j\u00e4rgmiste harjutuste jaoks installige <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: kasutan <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/pycharm\/\">PyCharm<\/a><\/noindex>, aga neid on <noindex><a rel=\"nofollow\" href=\"https:\/\/realpython.com\/python-ides-code-editors-guide\/\">palju<\/a><\/noindex>. Kui kasutate Atelier'i, siis on olemas Eclipse'i plugin Python'i arendajatele. Kui kasutate VS Code'i, siis on olemas Python'i laiendus. <\/li>\n<li>Notebook: IDE asemel saate oma skripte kirjutada ja jagada veebip\u00f5histes m\u00e4rkmikes. K\u00f5ige populaarsem neist on <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"biblioteki\">Raamatukogud<\/h2>\n<p><\/p>\n<p>Siin on (puudulik) nimekiri masin\u00f5ppe raamatukogudest:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.numpy.org\/\">Numpy<\/a><\/noindex> \u2014 t\u00e4psete arvutuste aluspakk.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pandas.pydata.org\/\">Pandas<\/a><\/noindex> \u2014 k\u00f5rge j\u00f5udlusega andmestruktuurid ja andmeanal\u00fc\u00fcsi t\u00f6\u00f6riistad.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/matplotlib.org\/\">Matplotlib<\/a><\/noindex> \u2014 joonistamine.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/seaborn.pydata.org\/\">Seaborn<\/a><\/noindex> \u2014 andmete visualiseerimine, mis p\u00f5hineb matplotlib'il.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/scikit-learn.org\/stable\/\">Sklearn<\/a><\/noindex> \u2014 masin\u00f5ppe meetodid.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xgboost.readthedocs.io\/en\/latest\/index.html\">XGBoost<\/a><\/noindex> \u2014 masin\u00f5ppe algoritmid, mis p\u00f5hinevad gradientide t\u00f5ukamise metoodikal.<\/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\/\">, mis pakub mitmeid mudeli koostamise liideseid (Sequential, Functional, Subclassing) ja v\u00f5imaldab nende<\/a><\/noindex> \u2014 n\u00e4rviv\u00f5rgud.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/\">Tensorflow<\/a><\/noindex> \u2014 platvorm masin\u00f5ppemudelite loomiseks.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/pytorch.org\/\">PyTorch<\/a><\/noindex> \u2014 platvorm masin\u00f5ppemudelite loomiseks, mis on suunatud Python'ile.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nyoka-pmml\/nyoka\">Nyoka<\/a><\/noindex> \u2014 PMML erinevatest mudelitest.<\/li>\n<\/ul>\n<p><\/p>\n<p>AI\/ML tehnoloogiad v\u00f5imaldavad teha \u00e4ri t\u00f5husamaks ja kohanemisv\u00f5imelisemaks. Rohkemgi veel, need tehnoloogiad muutuvad t\u00e4na arendamiseks ja rakendamiseks lihtsamaks. Alustage AI\/ML tehnoloogiate \u00f5ppimist ja sellega, kuidas need v\u00f5ivad aidata teie organisatsioonil kasvada.<\/p>\n<p><\/p>\n<h1 id=\"ustanovka\">Paigaldamine<\/h1>\n<p><\/p>\n<p>On mitmeid viise Python Gateway'i installimiseks ja kasutamiseks:<\/p>\n<p><\/p>\n<ul>\n<li>on teil alati k\u00f5ige uuemad tarkvaralahendused.\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>Kasutage DockerHub'i kujutist<\/li>\n<li>Looge oma enda kujutis<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>\u00dcksk\u00f5ik, kuidas te installite, vajate l\u00e4htekoodi. Ains koht koodi allalaadimiseks on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">vabastamise leht<\/a><\/noindex>. See sisaldab testitud stabiilseid versioone, v\u00f5tke lihtsalt viimane. Hetkel on see 0.8, kuid ajaga tuleb uusi. \u00c4rge kloonige\/laadige alla reposiit, laadige alla viimane versioon.<\/p>\n<p><\/p>\n<h2 id=\"os\">on teil alati k\u00f5ige uuemad tarkvaralahendused.<\/h2>\n<p><\/p>\n<p>Kui installite Python Gateway operatsioonis\u00fcsteemi, peate esmalt (\u00fcksk\u00f5ik millisest operatsioonis\u00fcsteemist) installima Python. Selleks:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Installige Python 3.6.7 64 bit<\/a><\/noindex>. Soovitav on installida Python vaikekausta.<\/li>\n<li>Installige moodul <code>dill<\/code>: <code>pip install dill<\/code>.<\/li>\n<li>Laadige ObjectScript kood (st. <code>do $system.OBJ.ImportDir(&quot;C:InterSystemsReposPythoniscpy&quot;, &quot;*.cls&quot;, &quot;c&quot;,,1)<\/code>) \u00fcksk\u00f5ik millises valdkonnas tooteid. Kui soovite, et olemasolev valdkond toetaks tooteid, tehke j\u00e4rgmist: <code>write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1)<\/code>.<\/li>\n<li>Asetage <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">callout DLL\/SO\/DYLIB<\/a><\/noindex> kausta <code>bin<\/code> teie InterSystems IRIS instantsis. Raamatukogu fail peab olema k\u00e4tte saadav teelt, mille tagastab <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>Veenduge, et keskkonnamuutuja <code>PYTHONHOME<\/code> osutab Python 3.6.7-le.<\/li>\n<li>Veenduge, et s\u00fcsteemi keskkonnamuutuja <code>PATH<\/code> sisaldab muutujat <code>PYTHONHOME<\/code> (v\u00f5i katalooge, millele see osutab).<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"linux-debianubuntu\">Linux (Debian\/Ubuntu)<\/h3>\n<p><\/p>\n<ol>\n<li>Kontrollige, et keskkonnamuutuja <code>PATH<\/code> sisaldab <code>\/usr\/lib<\/code> ja <code>\/usr\/lib\/x86_64-linux-gnu<\/code>. Kasutage faili <code>\/etc\/environment<\/code> keskkonnamuutujate seadistamiseks.<\/li>\n<li>Vigade korral <code>undefined symbol: _Py_TrueStruct<\/code> seadke konfiguratsioon <code>PythonLib<\/code>. Samuti on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme-s<\/a><\/noindex> osa t\u00f5rkeotsingust.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"mac\">Mac<\/h3>\n<p><\/p>\n<ol>\n<li>Praegu toetatakse ainult Python 3.6.7 versiooni lehelt <noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python.org.<\/a><\/noindex>Kontrollige muutujaid <code>PATH<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Kui olete keskkonnamuutujaid muutnud, taask\u00e4ivitage oma InterSystems toode.<\/p>\n<p><\/p>\n<h2 id=\"docker\">Docker<\/h2>\n<p><\/p>\n<p>Konteinerite kasutamisel on mitmeid eeliseid: <\/p>\n<p><\/p>\n<ul>\n<li>Kantavus<\/li>\n<li>T\u00f5husus<\/li>\n<li>Isolatsioon<\/li>\n<li>Kergus<\/li>\n<li>Muudetavus<\/li>\n<\/ul>\n<p><\/p>\n<p>Tutvuge selle <noindex><a rel=\"nofollow\" href=\"https:\/\/community.intersystems.com\/post\/continuous-delivery-your-intersystems-solution-using-gitlab-part-v-why-containers\">artiklite sarjaga<\/a><\/noindex> rohkema teabe saamiseks Docker'i kasutamisest InterSystems toodetega. <\/p>\n<p><\/p>\n<p>K\u00f5ik Python Gateway kogud p\u00f5hinevad praegu konteineritel <code>2019.4<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"gotovyy-obraz\">Valmis pilt<\/h3>\n<p><\/p>\n<p>K\u00e4ivitage: <code>docker run -d -p 52773:52773 --name irispy intersystemscommunity\/irispy-community:latest<\/code>, et laadida ja k\u00e4ivitada Python Gateway InterSystems IRIS Community Edition'iga. Nii lihtne see on.<\/p>\n<p><\/p>\n<h3 id=\"sozdayte-svoy-sobstvennyy-obraz\">Looge oma enda kujutis<\/h3>\n<p><\/p>\n<p>Dokker-pildi koostamiseks k\u00e4ivitage reposi juuris: <code>docker build --force-rm --tag intersystemscommunity\/irispy:latest .<\/code>.<br \/>\nVaikimisi koostatakse pilt pildi p\u00f5hjal <code>store\/intersystems\/iris-community:2019.4.0.383.0<\/code>, kuid saate seda muuta, seadistades muutuja <code>IMAGE<\/code>.<br \/>\n\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0437 InterSystems IRIS \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435: `docker build &#8212;build-arg IMAGE=store\/intersystems\/iris:2019.4.0.383.0 &#8212;force-rm &#8212;tag intersystemscommunity\/irispy:latest &#171;.<\/p>\n<p><\/p>\n<p>P\u00e4rast seda v\u00f5ite k\u00e4ivitada dokker-pildi:<\/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>Kui kasutate pilti, mis p\u00f5hineb InterSystems IRIS Community Edition'il, ei pruugi te v\u00f5tit m\u00e4\u00e4rata.<\/p>\n<p><\/p>\n<h3 id=\"kommentarii\">Kommentaarid<\/h3>\n<p><\/p>\n<ul>\n<li>Testimisprotsess <code>isc.py.test.Process<\/code> \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0440\u044f\u0434 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u043d\u0430 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u0430\u0442\u0430\u043b\u043e\u0433. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 <code>WorkingDir<\/code> \u0443\u043a\u0430\u0437\u0430\u0432 \u0441\u043c\u043e\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e.<\/li>\n<li>\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435: <code>docker exec -it irispy sh<\/code>.<\/li>\n<li>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u041f\u043e\u0440\u0442\u0430\u043b\u0443 \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0421\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u043e \u043b\u043e\u0433\u0438\u043d\u0443 <code>SuperUser<\/code>\/<code>SYS<\/code>.<\/li>\n<li>\u0427\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435: <code>docker stop irispy &amp;&amp; docker rm --force irispy<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"proverka-ustanovki\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/h2>\n<p><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 Python Gateway, \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0435 InterSystems IRIS:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Callout).Setup() \nset sc = ##class(isc.py.Main).SimpleString(&quot;x='HELLO'&quot;, &quot;x&quot;, , .var).\nwrite var<\/code><\/pre>\n<p><\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043e <code>HELLO<\/code> \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Python-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>x<\/code>. \u0415\u0441\u043b\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441 <code>sc<\/code> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439 \u0438\u043b\u0438 <code>var<\/code> \u043f\u0443\u0441\u0442\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme \u2014 Troubleshooting section<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"api\">API<\/h1>\n<p><\/p>\n<p>Python Gateway \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d, \u0438 \u0432\u044b \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041f\u043e\u0440\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c!<br \/>\n\u0413\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a Python \u044d\u0442\u043e <code>isc.py.Main<\/code>. \u041e\u043d \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 (\u0432\u0441\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 <code>%Status<\/code>):<\/p>\n<p><\/p>\n<ul>\n<li>\u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430<\/li>\n<li>Andmete edastamine<\/li>\n<li>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"ispolnenie-koda\">\u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430<\/h2>\n<p><\/p>\n<p>\u042d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 Python-\u043a\u043e\u0434.<\/p>\n<p><\/p>\n<h3 id=\"simplestring\">SimpleString<\/h3>\n<p><\/p>\n<p><code>SimpleString<\/code> \u2014 \u044d\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0435\u0442\u043e\u0434. \u041e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 4 \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0421\u0438\u043c\u0432\u043e\u043b \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0441\u0442\u0440\u043e\u043a\u0438: <code>$c(10)<\/code>.<\/li>\n<li><code>returnVariable<\/code> \u2014 \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430.<\/li>\n<li><code>serialization<\/code> \u2014 \u043a\u0430\u043a \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <code>returnVariable<\/code>. 0 \u2014 string (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e), 1 \u2014 repr.<\/li>\n<li><code>result<\/code> \u2014 ByRef \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>returnVariable<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u0412\u044b\u0448\u0435 \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).SimpleString(&quot;x='HELLO'&quot;, &quot;x&quot;, , .var).<\/code><\/pre>\n<p><\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 Python <code>x<\/code> v\u00e4\u00e4rtuse <code>Tere<\/code> \u0438 \u0445\u043e\u0442\u0438\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Python \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>x<\/code> \u0432 ObjectScript \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>var<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"executecode\">ExecuteCode<\/h3>\n<p><\/p>\n<p>ExecuteCode \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0438 \u043c\u0435\u043d\u0435\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043e\u0439 <code>SimpleString<\/code>.<br \/>\n\u0421\u0442\u0440\u043e\u043a\u0438 \u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 InterSystems IRIS \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b 3 641 144 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438, \u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430, \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u0438.<br \/>\n\u041f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u043b\u0438 \u043f\u043e\u0442\u043e\u043a Python \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/li>\n<li><code>variable<\/code> \u2014 (\u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <code>code<\/code> \u044d\u0442\u043e\u0439 Python \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).ExecuteCode(&quot;2*3&quot;, &quot;y&quot;).<\/code><\/pre>\n<p><\/p>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0443\u043c\u043d\u043e\u0436\u0430\u0435\u043c 2 \u043d\u0430 3 \u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 Python \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>y<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"peredacha-dannyh\">Andmete edastamine<\/h2>\n<p><\/p>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 Python \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e.<\/p>\n<p><\/p>\n<h3 id=\"python---intersystems-iris\">Python -&gt; InterSystems IRIS<\/h3>\n<p><\/p>\n<p>\u0415\u0441\u0442\u044c 4 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Python \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 InterSystems IRIS, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u0430:<\/p>\n<p><\/p>\n<ul>\n<li><code>String<\/code> lihtsate andmete t\u00fc\u00fcpide ja silumise jaoks.<\/li>\n<li><code>Repr<\/code> lihtsate objektide salvestamiseks ja silumise jaoks.<\/li>\n<li><code>JSON<\/code> andmete lihtsaks manipuleerimiseks InterSystems IRIS-i k\u00fcljel.<\/li>\n<li><code>Pickle<\/code> objektide salvestamiseks.<\/li>\n<\/ul>\n<p><\/p>\n<p>Need meetodid v\u00f5imaldavad saada muutujaid Pythonis stringi v\u00f5i voogena.<\/p>\n<p><\/p>\n<ul>\n<li><code>GetVariable(variable, serialization, .stream, useString)<\/code> \u2014 saada <code>serialization<\/code> muutuja <code>variable<\/code> ja <code>stream<\/code>. Kui <code>useString<\/code> on 1 ja serialiseerimine pannakse stringi, tagastatakse string, mitte voog.<\/li>\n<li><code>GetVariableJson(variable, .stream, useString)<\/code> \u2014 saada JSON serialiseerimise muutuja.<\/li>\n<li><code>GetVariablePickle(variable, .stream, useString, useDill)<\/code> \u2014 saada Pickle (v\u00f5i Dill) serialiseerimise muutuja.<\/li>\n<\/ul>\n<p><\/p>\n<p>Proovime saada meie muutuja <code>y<\/code>.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set sc = ##class(isc.py.Main).GetVariable(&quot;y&quot;, , .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>Laeme andmeid InterSystems IRIS-st Pythonisse.<\/p>\n<p><\/p>\n<ul>\n<li><code>ExecuteQuery(query, variable, type, namespace)<\/code> \u2014 loob andmekogumi (pandas <code>dataframe<\/code> v\u00f5i <code>loend<\/code>) sql p\u00e4ringu p\u00f5hjal ja m\u00e4\u00e4rab selle Python muutuja. <code>variable<\/code>. Pakett <code>isc.py<\/code> peab olema saadaval alal <code>namespace<\/code> \u2014 seal hakatakse p\u00e4ringut t\u00e4itma.<\/li>\n<li><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 laadib globaali andmed <code>global<\/code> alamskripti <code>start<\/code> kuni <code>l\u00f5peta<\/code> Pythonis muutuja t\u00fc\u00fcpi <code>type<\/code>: <code>loend<\/code>, v\u00f5i pandas <code>dataframe<\/code>. Valikute argumentide kirjeldus <code>mask<\/code> ja <code>labels<\/code> on saadaval klassi dokumentatsioonis ja hoidlas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Andme\u00fclekande dokumendid<\/a><\/noindex>.<\/li>\n<li><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 laadib klassi andmed <code>class<\/code> id-st <code>start<\/code> kuni <code>l\u00f5peta<\/code> Pythonis muutuja t\u00fc\u00fcpi <code>type<\/code>: <code>loend<\/code>, v\u00f5i pandas <code>dataframe<\/code>. <code>properties<\/code> \u2014 omaduste loetelu (eraldaja - koma), mida tuleb andmekogusse laadida. Toetatakse maske <code>*<\/code> ja <code>?<\/code>. Vaikimisi \u2014 <code>*<\/code> (k\u00f5ik omadused). Omadus <code>%%CLASSNAME<\/code> ignored.<\/li>\n<li><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 laadib tabeli andmed <code>table<\/code> id-st <code>start<\/code> kuni <code>l\u00f5peta<\/code> Pythonisse.<\/li>\n<\/ul>\n<p><\/p>\n<p><code>ExecuteQuery<\/code> \u2014 universaalne (iga korrektne SQL-p\u00e4ring edastatakse Pythonisse). Siiski, <code>ExecuteGlobal<\/code> ja selle \u00fcmbrised <code>ExecuteClass<\/code> ja <code>ExecuteTable<\/code> t\u00f6\u00f6tavad mitmete piirangutega. Need on palju kiirem (3-5 korda kiiremini ODBC-draiverist ja 20 korda kiiremini <code>ExecuteQuery<\/code>). T\u00e4iendav teave <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Andme\u00fclekande dokumendid<\/a><\/noindex>.<br \/>\nK\u00f5ik need meetodid toetavad andmete edastamist igast piirkonnast. Pakett <code>isc.py<\/code> peab olema saadaval sihtpiirkonnas.<\/p>\n<p><\/p>\n<h3 id=\"executequery\">ExecuteQuery<\/h3>\n<p><\/p>\n<p><code>ExecuteQuery(request, variable, type, namespace)<\/code> \u2014 edastab iga korrektse SQL-p\u00e4ringu tulemused Pythonisse. See on andmete edastamise k\u00f5ige aeglasem meetod. Kasutage seda, kui <code>ExecuteGlobal<\/code> ja selle \u00fcmbrised pole saadaval.<\/p>\n<p><\/p>\n<p>Argumentid:<\/p>\n<p><\/p>\n<ul>\n<li><code>query<\/code> \u2014 sql p\u00e4ring.<\/li>\n<li><code>variable<\/code> \u2014 Python muutuja nimi, kuhu andmed salvestatakse.<\/li>\n<li><code>type<\/code> \u2014 <code>loend<\/code> v\u00f5i Pandas <code>dataframe<\/code>.<\/li>\n<li><code>namespace<\/code> \u2014 piirkond, kus p\u00e4ring t\u00e4idetakse.<\/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 globaali edastamine Pythonisse.<\/p>\n<p><\/p>\n<p>Argumentid:<\/p>\n<p><\/p>\n<ul>\n<li><code>global<\/code> \u2014 globaali nimi ilma <code>^<\/code><\/li>\n<li><code>variable<\/code> \u2014 Python muutuja nimi, kuhu andmed salvestatakse.<\/li>\n<li><code>type<\/code> \u2014 <code>loend<\/code> v\u00f5i Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 esimene globaalne alamskript. Kohustuslik <code>%Integer<\/code>.<\/li>\n<li><code>l\u00f5peta<\/code> \u2014 viimane globaalne alamskript. Kohustuslik <code>%Integer<\/code>.<\/li>\n<li><code>mask<\/code> \u2014 globaalsete v\u00e4\u00e4rtuste mask. Mask v\u00f5ib olla l\u00fchem kui globaalsete v\u00e4ljade arv (sellisel juhul j\u00e4etakse l\u00f5pus v\u00e4ljad vahele). Kuidas maski vormindada:\n<ul>\n<li><code>+<\/code> edasta v\u00e4\u00e4rtus sellisena, nagu see on.<\/li>\n<li><code>-<\/code> j\u00e4ta v\u00e4\u00e4rtus vahele.<\/li>\n<li><code>b<\/code> \u2014 Loogiline t\u00fc\u00fcp (<code>0<\/code> \u2014 <code>Vale<\/code>, k\u00f5ik muu \u2014 <code>T\u00f5si<\/code>).<\/li>\n<li><code>d<\/code> \u2014 Kuup\u00e4ev ($horolog, Windowsis alates 1970, Linuxis alates 1900).<\/li>\n<li><code>t<\/code> \u2014 Aeg ($horolog, sekundid kesk\u00f6\u00f6st).<\/li>\n<li><code>m<\/code> \u2014 Aja m\u00e4rge (aasta-kuu-p\u00e4ev tund:minuut:sekund formaadis).<\/li>\n<\/ul>\n<\/li>\n<li><code>labels<\/code> \u2014 %Loend veergude nimedest. Esimene element \u2014 alamskripti nimi.<\/li>\n<li><code>namespace<\/code> \u2014 piirkond, kus p\u00e4ring t\u00e4idetakse.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"executeclass\">ExecuteClass<\/h3>\n<p><\/p>\n<p>Kapseldus <code>ExecuteGlobal<\/code>. Klassi m\u00e4\u00e4ratluse p\u00f5hjal valmistab ette kutse <code>ExecuteGlobal<\/code> ja kutsub selle esile.<\/p>\n<p><\/p>\n<p><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 Klasside andmete edastamine Pythonis.<\/p>\n<p><\/p>\n<p>Argumentid:<\/p>\n<p><\/p>\n<ul>\n<li><code>class<\/code> \u2014 klassi nimi<\/li>\n<li><code>variable<\/code> \u2014 Python muutuja nimi, kuhu andmed salvestatakse.<\/li>\n<li><code>type<\/code> \u2014 <code>loend<\/code> v\u00f5i Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 algne Id.<\/li>\n<li><code>l\u00f5peta<\/code> \u2014 l\u00f5pp Id<\/li>\n<li><code>properties<\/code> \u2014 omaduste loetelu (eraldaja - koma), mida tuleb andmekogusse laadida. Toetatakse maske <code>*<\/code> ja <code>?<\/code>. Vaikimisi \u2014 <code>*<\/code> (k\u00f5ik omadused). Omadus <code>%%CLASSNAME<\/code> ignored.<\/li>\n<li><code>namespace<\/code> \u2014 piirkond, kus p\u00e4ring t\u00e4idetakse.<\/li>\n<\/ul>\n<p><\/p>\n<p>K\u00f5ik omadused edastatakse sellisena, nagu need on, v\u00e4lja arvatud t\u00fc\u00fcbi omadused <code>%Date<\/code>, <code>g<\/code>, <code>%Loogiline<\/code> ja <code>%AjaM\u00e4rk<\/code> \u2014 need konverteeritakse vastavatesse Python klassidesse.<\/p>\n<p><\/p>\n<h3 id=\"executetable\">ExecuteTable<\/h3>\n<p><\/p>\n<p>Kapseldus <code>ExecuteClass<\/code>. Edastab tabeli nime klassi nime ja kutsub selle esile <code>ExecuteClass<\/code>. Allkiri:<\/p>\n<p><\/p>\n<p><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 tabeli andmete edastamine Pythonis.<\/p>\n<p><\/p>\n<p>Argumentid:<\/p>\n<p><\/p>\n<ul>\n<li><code>table<\/code> \u2014 tabeli nimi.<br \/>\nK\u00f5ik teised argumendid edastatakse sellisena, nagu need on <code>ExecuteClass<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"zametki\">M\u00e4rkused<\/h3>\n<p><\/p>\n<ul>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> ja <code>ExecuteTable<\/code> t\u00f6\u00f6tavad sama kiiresti.<\/li>\n<li><code>ExecuteGlobal<\/code> 20 korda kiiremini kui <code>ExecuteQuery<\/code> suurte andmekogude korral (andmete edastamise aeg &gt;0.01 sekundit).<\/li>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> ja <code>ExecuteTable<\/code> t\u00f6\u00f6tavad globaalidega, millel on antud struktuur: <code>^global(key) = $lb(prop1, prop2, ..., propN)<\/code> kus <code>key<\/code> \u2014 t\u00e4isarv.<\/li>\n<li>Tooge <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> ja <code>ExecuteTable<\/code> toetatud v\u00e4\u00e4rtuste vahemik <code>%Date<\/code> vastab vahemikule <code>mktime<\/code> ja s\u00f5ltub ops\u00fcsteemist (<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>). Kasutage <code>%AjaM\u00e4rk<\/code>andmete edastamiseks sellest vahemikust v\u00e4ljapoole v\u00f5i kasutage pandas dataframe'i, kuna see piirang kehtib ainult loendi kohta.<\/li>\n<li>Tooge <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> ja <code>ExecuteTable<\/code> k\u00f5ik argumendid v\u00e4lja arvatud andmeallikas (globaal, klass v\u00f5i tabel) ja muutuja on valikulised.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"primery\">N\u00e4ited<\/h2>\n<p><\/p>\n<p>Testklass <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/isc\/py\/test\/Person.cls\">isc.py.test.Person<\/a><\/noindex> sisaldab meetodit, mis demonstreerib k\u00f5iki andmete edastamise variante:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">set global = &quot;isc.py.test.PersonD&quot;\nset class = &quot;isc.py.test.Person&quot;\nset table = &quot;isc_py_test.Person&quot;\nset query = &quot;SELECT * FROM isc_py_test.Person&quot;\n\n\/\/ \u041e\u0431\u0449\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b\nset variable = &quot;df&quot;\nset type = &quot;dataframe&quot;\nset start = 1\nset end = $g(^isc.py.test.PersonD, start)\n\n\/\/ \u0421\u043f\u043e\u0441\u043e\u0431 0: ExecuteGlobal \u0431\u0435\u0437 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)\n\n\/\/ \u0421\u043f\u043e\u0441\u043e\u0431 1: ExecuteGlobal \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438    \n\/\/ \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u0430 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e\n\/\/ globalKey - \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0430\u0431\u0441\u0442\u043a\u0440\u0438\u043f\u0442\u0430 \nset labels = $lb(&quot;globalKey&quot;, &quot;Name&quot;, &quot;DOB&quot;, &quot;TS&quot;, &quot;RandomTime&quot;, &quot;AgeYears&quot;, &quot;AgeDecimal&quot;, &quot;AgeDouble&quot;, &quot;Bool&quot;)\n\n\/\/ mask \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430 1 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0447\u0435\u043c labels \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e &quot;globalKey&quot; - \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0441\u0430\u0431\u0441\u043a\u0438\u043f\u0442\u0430\n\/\/ \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c %%CLASSNAME\nset mask = &quot;-+dmt+++b&quot;\n\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)\n\n\/\/ \u0421\u043f\u043e\u0441\u043e\u0431 2: ExecuteClass\nset sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)\n\n\/\/ \u0421\u043f\u043e\u0441\u043e\u0431 3: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)\n\n\/\/ \u0421\u043f\u043e\u0441\u043e\u0431 4: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)<\/code><\/pre>\n<p><\/p>\n<p>K\u00e4ivitage meetod <code>do ##class(isc.py.test.Person).Test()<\/code> et n\u00e4ha, kuidas t\u00f6\u00f6tab k\u00f5ik andmete edastamise meetodid.<\/p>\n<p><\/p>\n<h2 id=\"vspomogatelnye-metody\">Abimeetodid<\/h2>\n<p><\/p>\n<ul>\n<li><code>GetVariableInfo(variable, serialization, .defined, .type, .length)<\/code> \u2014 saada teavet muutuja kohta: kas see on m\u00e4\u00e4ratud, klass ja serialiseerimise pikkus.<\/li>\n<li><code>GetVariableDefined(variable, .defined)<\/code> \u2014 kas muutuja on m\u00e4\u00e4ratud.<\/li>\n<li><code>GetVariableType(variable, .type)<\/code> \u2014 saada muutuja klassi.<\/li>\n<li><code>GetStatus()<\/code> \u2014 saada ja eemaldada viimane erand Python'i poolel.<\/li>\n<li><code>GetModuleInfo(module, .imported, .alias)<\/code> \u2014 saada mooduli muutuja ja importimise staatus.<\/li>\n<li><code>GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)<\/code> \u2014 saada teavet funktsiooni kohta.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"interoperabelnost\">\u00dchenduvus<\/h1>\n<p><\/p>\n<p>Olete \u00f5ppinud, kuidas kutsuda Python Gateway'i terminalist, n\u00fc\u00fcd alustame selle kasutamist toodetes. Python'i integreerimise aluseks sellises re\u017eiimis on <code>isc.py.ens.Operation<\/code>. See v\u00f5imaldab meil:<\/p>\n<p><\/p>\n<ul>\n<li>K\u00e4ivitada koodi Python'is<\/li>\n<li>Salvestada\/taastada Python konteksti<\/li>\n<li>Laadida ja saada andmeid Python'ist<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00f5him\u00f5tteliselt on Python'i operatsioon \u00fcmberringi kapseldamine <code>isc.py.Main<\/code>. Operatsioon <code>isc.py.ens.Operation<\/code> v\u00f5imaldab interakteeruda Python'i protsessiga InterSystems IRIS toodetest. Toetatakse viit p\u00e4ringut:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.ExecutionRequest<\/code> Python koodi t\u00e4itmiseks. Tagastab <code>isc.py.msg.ExecutionResponse<\/code> t\u00e4itmise tulemuse ja k\u00fcsitud muutujate v\u00e4\u00e4rtused.<\/li>\n<li><code>isc.py.msg.StreamExecutionRequest<\/code> Python koodi t\u00e4itmiseks. Tagastab <code>isc.py.msg.StreamExecutionResponse<\/code> t\u00e4itmise tulemuse ja k\u00fcsitud muutujate v\u00e4\u00e4rtused. Sarnane <code>isc.py.msg.ExecutionRequest<\/code>, kuid v\u00f5tab ja tagastab vooge j\u00f5ude asemel stringe.<\/li>\n<li><code>isc.py.msg.QueryRequest<\/code> SQL p\u00e4ringu t\u00e4itmise tulemuse edastamiseks. Tagastab <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> andmete edastamiseks globaalsete \/klasside \/tabelite jaoks. Tagastab <code>Ens.Response<\/code>.<\/li>\n<li><code>isc.py.msg.SaveRequest<\/code> Python konteksti salvestamiseks. Tagastab <code>Ens.StringResponse<\/code> konteksti identifikaatoriga.<\/li>\n<li>\n<p><code>isc.py.msg.RestoreRequest<\/code> Python konteksti taastamiseks.<\/p>\n<p><\/p>\n<p>Lisaks, <code>isc.py.ens.Operation<\/code> on kaks seadistust:<\/p>\n<p><\/p>\n<ul>\n<li><code>Initializer<\/code> \u2014 klassi valik, mis rakendab liidest <code>isc.py.init.Abstract<\/code>. Seda saab kasutada funktsioonide, moodulite, klasside jne laadimiseks. See t\u00e4idetakse \u00fcks kord protsessi k\u00e4ivitamisel.<\/li>\n<li><code>PythonLib<\/code> \u2014 (ainult Linuxi jaoks) kui n\u00e4ete laadimisel vigu, seadke selle v\u00e4\u00e4rtus <code>libpython3.6m.so<\/code> v\u00f5i isegi t\u00e4ielik tee Python teeki. <\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"sozdanie-biznes-processov\">\u00c4riprocesside loomine<\/h2>\n<p><\/p>\n<p>Kaks klassi on saadaval, et lihtsustada \u00e4riprotsesside arendamist:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.ens.ProcessUtils<\/code> v\u00f5imaldab saada t\u00f5lgendusi tegevustest, asendades muutujaid.<\/li>\n<li><code>isc.py.util.BPEmulator<\/code> v\u00f5imaldab h\u00f5lpsasti testida \u00e4riprotsesse Pythonis. See suudab t\u00e4ita \u00e4riprotsessi (Python keeles osasid) jooksval protsessil.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"podstanovka-peremennyh\">Muutujate asendamine<\/h2>\n<p><\/p>\n<p>K\u00f5ik \u00e4riprotsessid, mis p\u00e4rivad <code>isc.py.ens.ProcessUtils<\/code>, saavad kasutada meetodit <code>GetAnnotation(name)<\/code> aktiivsuse t\u00f5lgenduse v\u00e4\u00e4rtuse saamiseks selle nime j\u00e4rgi. Tegevuse t\u00f5lgendus v\u00f5ib sisaldada muutujaid, mis arvutatakse InterSystems IRIS'i k\u00fcljel enne Pythonisse saatmist. Siin on muutuja asendamise s\u00fcntaks:<\/p>\n<p><\/p>\n<ul>\n<li><code>${class:method:arg1:...:argN}<\/code> \u2014 meetodi kutsumine<\/li>\n<li><code>#{expr}<\/code> \u2014 koodi t\u00e4itmine ObjectScript keeles.<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00e4ide on saadaval testivas \u00e4riprotsessis <code>isc.py.test.Process<\/code>, n\u00e4iteks tegevuses <code>Correlation Matrix: Graph<\/code>: <code>f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png')<\/code>. Selles n\u00e4ites:<\/p>\n<p><\/p>\n<ul>\n<li><code>#{process.WorkDirectory}<\/code> tagastab objekti WorkDirectory omaduse <code>process<\/code>, mis on klassi eksemplar <code>isc.py.test.Process<\/code> st. k\u00e4esolev \u00e4riprotsess.<\/li>\n<li><code>${%PopulateUtils:Integer:1:100}<\/code> kutsib meetodi <code>Integer<\/code> klassist <code>%PopulateUtils<\/code>, edastades argumendid <code>1<\/code> ja <code>100<\/code>, tagastades juhusliku t\u00e4isarvu vahemikus <code>1...100<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"testovyy-biznes-process\">Testimisprotsess<\/h2>\n<p><\/p>\n<p>Testtooted ja testimisprotsess on vaikimisi saadaval osana Python Gateway'st. Kasutamiseks:<\/p>\n<p><\/p>\n<ol>\n<li>K\u00e4ivitage OS terminalis: <code>pip install pandas matplotlib seaborn<\/code>. <\/li>\n<li>K\u00e4ivitage InterSystems IRIS terminalis: <code>do ##class(isc.py.test.CannibalizationData).Import()<\/code> testandmete t\u00e4itmiseks.<\/li>\n<li>K\u00e4ivitage toode <code>isc.py.test.Production<\/code>.<\/li>\n<li>Saada n\u00f5ue t\u00fc\u00fcpi <code>Ens.Request<\/code> ja <code>isc.py.test.Process<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Vaadake, kuidas k\u00f5ik see koos toimib. Avage <code>isc.py.test.Process<\/code> BPL redaktoris:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway InterSystems IRIS-s\" src=\"\/wp-content\/uploads\/2020\/02\/6f83b22e0167e2699d285f3e32bfe373.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"ispolnenie-koda-1\">\u0418\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430<\/h3>\n<p><\/p>\n<p>K\u00f5ige olulisem kutse - Python koodi t\u00e4itmine:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway InterSystems IRIS-s\" src=\"\/wp-content\/uploads\/2020\/02\/dafa6b8c878ae937b194ff577b86dc89.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kasutatakse n\u00f5uet <code>isc.py.msg.ExecutionRequest<\/code>, siin on selle omadused:<\/p>\n<p><\/p>\n<ul>\n<li><code>Kood<\/code> \u2014 Python kood.<\/li>\n<li><code>SeparateLines<\/code> \u2014 kas jagada kood readeks t\u00e4itmiseks. <code>$c(10)<\/code> (<code>n<\/code>) kasutatakse ridade eraldamiseks. Pange t\u00e4hele, et kogu s\u00f5numit korraga t\u00f6\u00f6delda ei soovitata, see funktsioon on m\u00f5eldud ainult t\u00f6\u00f6tlemiseks <code>def<\/code> ja sarnaste mitmerealiste avalduste jaoks. Vaikimisi <code>0<\/code>.<\/li>\n<li><code>Variables<\/code> \u2014 koma eraldatud muutuja nimekiri, mis lisatakse vastusesse.<\/li>\n<li><code>Serialiseerimine<\/code> \u2014 Kuidas serialiseerida muutujaid, mida me soovime tagasi saata. Valikud: <code>Str<\/code>, <code>Repr<\/code>, <code>JSON<\/code>, <code>Pickle<\/code> ja <code>Dill<\/code>, vaikimisi <code>Str<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Meie puhul seadistame ainult omaduse <code>Kood<\/code>, nii et k\u00f5ik teised omadused kasutavad vaikimisi v\u00e4\u00e4rtusi. Seadistame selle, kutsudes <code>process.GetAnnotation(&quot;Import pandas&quot;)<\/code>, mis tagastab k\u00e4itamise ajal annotatsiooni p\u00e4rast muutuja asendusi. L\u00f5puks <code>import pandas as pd<\/code> edastatakse Pythonile. <code>GetAnnotation<\/code> v\u00f5ib olla kasulik mitmerealiste Python skriptide saamiseks, kuid selle koodi saamise meetodil ei ole mingit piirangut. Saate seada omaduse <code>Kood<\/code> igati mugaval viisil.<\/p>\n<p><\/p>\n<h3 id=\"poluchenie-peremennyh\">Muutujate saamine<\/h3>\n<p><\/p>\n<p>Veel \u00fcks huvitav v\u00e4ljakutse, kasutades <code>isc.py.msg.ExecutionRequest<\/code> \u2014 <code>Korrelatsioonide Maatriks: Tabel<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway InterSystems IRIS-s\" src=\"\/wp-content\/uploads\/2020\/02\/8824e49ecaa448551c830e9a90eb5781.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See arvutab Korrelatsioonide Maatriksi Pythonis ja ekstraktib muutuja <code>corrmat<\/code> tagasi InterSystems IRIS-s JSON formaadis, seades p\u00e4ringu omadused:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variables<\/code>: <code>&quot;corrmat&quot;<\/code><\/li>\n<li><code>Serialiseerimine<\/code>: <code>&quot;JSON&quot;<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Saame tulemusi Visual Trace'is n\u00e4ha:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway InterSystems IRIS-s\" src=\"\/wp-content\/uploads\/2020\/02\/713bcade8cb1018f2974cba2cab712b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kui see v\u00e4\u00e4rtus on meile BP-s vajalik, saame selle k\u00e4tte nii: <code>callresponse.Variables.GetAt(&quot;corrmat&quot;)<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh-1\">Andmete edastamine<\/h3>\n<p><\/p>\n<p>J\u00e4rgmisena r\u00e4\u00e4gime andmete edastamisest InterSystems IRIS-st Pythonisse, k\u00f5ik andmete edastamise p\u00e4ringud rakendavad liidest <code>isc.py.msg.DataRequest<\/code>, mis pakub j\u00e4rgmisi omadusi:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variable<\/code> \u2014 Python muutuja, kuhu andmed salvestatakse.<\/li>\n<li><code>T\u00fc\u00fcp<\/code> \u2014 muutuja t\u00fc\u00fcp: <code>dataframe<\/code> (pandas dataframe) v\u00f5i <code>loend<\/code>.<\/li>\n<li><code>Namespace<\/code> \u2014 ala, kust andmeid saadakse. Pakett <code>isc.py<\/code> peab olema selles v\u00e4ljas saadaval. See v\u00f5ib olla ala, mis ei toeta tootmisi.<\/li>\n<\/ul>\n<p><\/p>\n<p>Selle liidese alusel on rakendatud 4 p\u00e4ringute klassi:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.QueryRequest<\/code> \u2014 seadistage omadus <code>Query<\/code> SQL p\u00e4ringu edastamiseks.<\/li>\n<li><code>isc.py.msg.ClassRequest<\/code> \u2014 seadistage omadus <code>Class<\/code> klassi andmete edastamiseks.<\/li>\n<li><code>isc.py.msg.TableRequest<\/code> \u2014 seadistage omadus <code>Table<\/code> tabeli andmete edastamiseks.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code> \u2014 seadistage omadus <code>Global<\/code> globaalsete andmete edastamiseks.<\/li>\n<\/ul>\n<p><\/p>\n<p>Testimisprotsessi k\u00e4igus vaadake aktiivsust <code>RAW<\/code>, kus <code>isc.py.msg.QueryRequest<\/code> n\u00e4idatakse tegevuses.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway InterSystems IRIS-s\" src=\"\/wp-content\/uploads\/2020\/02\/f6a2a520594341b9d37110bcd24b1015.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h3 id=\"sohranenievosstanovlenie-python-konteksta\">Python konteksti salvestamine \/ taastamine<\/h3>\n<p><\/p>\n<p>L\u00f5puks saame salvestada Python konteksti InterSystems IRIS-s, et seda teha, saadame <code>isc.py.msg.SaveRequest<\/code> argumendina:<\/p>\n<p><\/p>\n<ul>\n<li><code>Mask<\/code> \u2014 Salvestatakse ainult need muutujad, mis vastavad maskile. Toetatakse <code>*<\/code> ja <code>?<\/code>. N\u00e4idis: <code>&quot;Data*, Figure?&quot;<\/code>. Vaikimisi <code>*<\/code>.<\/li>\n<li><code>MaxLength<\/code> \u2014 Muutmise maksimaalne pikkus. Kui muutuja seerumine on pikem, j\u00e4etakse see t\u00e4helepanuta. Seadke v\u00e4\u00e4rtuseks 0, et lubada muutujate mistahes pikkust. Vaikimisi <code>$$$MaxStringLength<\/code>.<\/li>\n<li><code>Nimi<\/code> \u2014 Konteksti nimi (valikuline).<\/li>\n<li><code>Kirjeldus<\/code> \u2014 Konteksti kirjeldus (valikuline).<\/li>\n<\/ul>\n<p><\/p>\n<p>Tagastab <code>Ens.StringResponse<\/code> jot <code>Id<\/code> salvestatud konteksti. Testimisprotsessi ajal vaadake aktiivsuseid <code>Salvesta kontekst<\/code>.<\/p>\n<p><\/p>\n<p>Vastav p\u00e4ring <code>isc.py.msg.RestoreRequest<\/code> laeb konteksti InterSystems IRIS-elt Pythonisse:<\/p>\n<p><\/p>\n<ul>\n<li><code>KontekstiId<\/code> \u2014 konteksti identifikaator.<\/li>\n<li><code>Kustuta<\/code> \u2014 puhasta konteksti enne taastamist.<\/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 avatud l\u00e4htekoodiga veebirakendus, mis v\u00f5imaldab luua k\u00f5vakettakujulisi faile, mis sisaldavad koodi, visualiseerimist ja teksti ning neid avaldada. Python Gateway v\u00f5imaldab vaadata ja redigeerida BPL-protsesse Jupyter Notebooki vormis. Pange t\u00e4hele, et hetkel kasutatakse tavalist Python 3 executor'i.<\/p>\n<p><\/p>\n<p>See laiend arvab, et annotatsioonid sisaldavad Python'i koodi ja kasutavad tegevuste nimesid eelpealkirjadena. N\u00fc\u00fcd on v\u00f5imalik arendada PythonGateway \u00e4riprotsesse Jupyter Notebookis. Siin on, mida on v\u00f5imalik: <\/p>\n<p><\/p>\n<ul>\n<li>Luua uusi \u00e4riprotsesse<\/li>\n<li>Kustutada \u00e4riprotsesse<\/li>\n<li>Luua uusi tegevusi<\/li>\n<li>Muuta tegevusi<\/li>\n<li>Kustutada tegevusi<\/li>\n<\/ul>\n<p><\/p>\n<p>Siin <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/mZizgVtZ014\">demo-video<\/a><\/noindex>. Ja m\u00f5ned ekraanipildid:<\/p>\n<p><\/p>\n<h2 id=\"provodnik-processov\">Protsesside sirvija<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway InterSystems IRIS-s\" src=\"\/wp-content\/uploads\/2020\/02\/6da1aa0a026c34238c57f96e82742bb9.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"redaktor-processa\">Protsessi redaktor<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway InterSystems IRIS-s\" src=\"\/wp-content\/uploads\/2020\/02\/651031fe9792cc1c5926aa386f4e37fd.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"ustanovka-1\">Paigaldamine<\/h2>\n<p><\/p>\n<ol>\n<li>Vajate InterSystems IRIS 2019.2+.<\/li>\n<li>Installige PythonGateway v0.8+ (vajalik ainult <code>isc.py.util.Jupyter<\/code>, <code>isc.py.util.JupyterCheckpoints<\/code> ja <code>isc.py.ens.ProcessUtils<\/code>).<\/li>\n<li>Uuendage ObjectScript'i koodi hoidlast.<\/li>\n<li>K\u00e4ivitage <code>do ##class(isc.py.util.Jupyter).Install()<\/code> ja j\u00e4rgige juhiseid.<\/li>\n<\/ol>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/tree\/master\/jupyter\">Dokumentatsioon<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"vyvody\">J\u00e4reldused<\/h1>\n<p><\/p>\n<p>MLToolkit on t\u00f6\u00f6riistade komplekt, mille eesm\u00e4rk on liita mudelid ja tehingute keskkond, et loodud mudeleid saaks h\u00f5lpsasti kasutada otse teie \u00e4riprotsessides. Python Gateway on osa MLToolkit'ist ja tagab integreerimise Python'i keelega, v\u00f5imaldades orkestreerida k\u00f5iki masin\u00f5ppe algoritme, mis on loodud Python'is (paljude andeteadlaste p\u00f5hiline keskkond), kasutades arvukalt valmis teeke kiireks muudetavate ja automatiseeritud anal\u00fc\u00fcsiv\u00f5ime AI\/ML lahenduste loomiseks InterSystems IRIS platvormil.<\/p>\n<p><\/p>\n<h1 id=\"ssylki\">Viidatud lingid<\/h1>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/473452\/\">Eelmine artikkel<\/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 n\u00e4idised<\/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\">Python'i dokumentatsioon ja kursused<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"mltoolkit\">MLToolkit<\/h1>\n<p><\/p>\n<p>MLToolkit'i kasutajate grupp on privaatne GitHubi hoidla, mis on loodud osana InterSystems'i ettev\u00f5tte GitHubi organisatsioonist. See on suunatud v\u00e4listele kasutajatele, kes installivad, uurivad v\u00f5i juba kasutavad MLToolkit komponente, sealhulgas Python Gateway'd. Grupis on saadaval mitmeid rakendatud juhtumeid (koos l\u00e4htekoodi ja testandmetega) turunduse, tootmise, meditsiini ja paljude teiste valdkondade alal. Et liituda ML Toolkit'i kasutajate grupiga, palun saatke l\u00fchike meil aadressile: <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> ja m\u00e4rkige oma kirjas j\u00e4rgmised andmed:<\/p>\n<p><\/p>\n<ul>\n<li>GitHubi kasutajanimi<\/li>\n<li>Organisatsioon (koht, kus t\u00f6\u00f6tate v\u00f5i \u00f5pite)<\/li>\n<li>\u0414\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c (\u0432\u0430\u0448\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u044c \u0432 \u0432\u0430\u0448\u0435\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0438\u043b\u0438 &quot;\u0421\u0442\u0443\u0434\u0435\u043d\u0442&quot;, \u0438\u043b\u0438 &quot;\u041d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439&quot;).<\/li>\n<li>Riik<\/li>\n<\/ul>\n<p><\/p>\n<p>Neile, kes on artikli l\u00e4bi lugenud ja huvitatud InterSystems IRIS'i v\u00f5imalustest kunstliku intellekti ja masin\u00f5ppe mehhanismide arendamiseks v\u00f5i majutamiseks, pakume v\u00f5imalust arutada teie ettev\u00f5ttele huvi pakkuvaid stsenaariume. Oleme valmis anal\u00fc\u00fcsima teie ettev\u00f5tte vajadusi ja \u00fchiselt m\u00e4\u00e4rama tegevuskava; meie AI\/ML ekspertgrupi kontaktmeiliaadress on <noindex><a rel=\"nofollow\" href=\"mailto:MLToolkit@intersystems.com\">MLToolkit@intersystems.com<\/a><\/noindex>.<\/p>\n<p>Allikas: <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.1.1 - 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\/et\/blog\/python-gateway-v-intersystems-iris\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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 InterSystems IRIS'is | ProHoster","description":"See artikkel on p\u00fchendatud Python Gateway'le \u2014 avatud l\u00e4htekoodiga kogukonna projektile InterSystems IRIS'i andmeplatvormile.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/python-gateway-v-intersystems-iris","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/41221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=41221"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/41221\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/41222"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=41221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=41221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=41221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}