{"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\/sl\/blog\/python-gateway-v-intersystems-iris","title":{"rendered":"Python Gateway v InterSystems IRIS","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ta stran je namenjena Python Gateway \u2014 skupnostnemu projektu z odprtokodnim programjem za podatkovno platformo InterSystems IRIS. Ta projekt omogo\u010da orkestracijo vseh algoritmov strojnega u\u010denja, ustvarjenih v jeziku Python (glavno okolje za \u0161tevilne podatkovne znanstvenike), in uporabo \u0161tevilnih \u017ee pripravljenih knji\u017enic za hitro ustvarjanje prilagodljivih, robotiziranih analiti\u010dnih AI\/ML re\u0161itev na platformi InterSystems IRIS. V tem \u010dlanku bom pokazal, kako lahko InterSystems IRIS orkestrira procese v jeziku Python, u\u010dinkovito izvede dvosmerni prenos podatkov in ustvari pametne poslovne procese.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"plan\">Na\u010drt<\/h1>\n<p><\/p>\n<ol>\n<li>Uvod.<\/li>\n<li>Orodja.<\/li>\n<li>Namestitev.<\/li>\n<li>API.<\/li>\n<li>Interoperabilnost.<\/li>\n<li>Jupyter Notebook.<\/li>\n<li>Zaklju\u010dci.<\/li>\n<li>Povezave.<\/li>\n<li>MLToolkit.<\/li>\n<\/ol>\n<p><\/p>\n<h1 id=\"vvedenie\">Uvod<\/h1>\n<p><\/p>\n<p>Python je visokonavzni programski jezik splo\u0161ne rabe, usmerjen v pove\u010danje produktivnosti razvijalca in berljivosti kode. V tej seriji \u010dlankov bom predstavil mo\u017enosti uporabe jezika Python na platformi InterSystems IRIS, pri \u010demer je glavni poudarek tega \u010dlanka uporaba Pythona kot jezika za ustvarjanje in izvajanje modelov strojnega u\u010denja.<\/p>\n<p><\/p>\n<p>Strojno u\u010denje (ML) je razred metod umetne inteligence, ki se odlikujejo po tem, da ne re\u0161ujejo naloge neposredno, temve\u010d se u\u010dijo v procesu re\u0161evanja \u0161tevilnih podobnih nalog. <\/p>\n<p><\/p>\n<p>Algoritmi in modeli strojnega u\u010denja postajajo vse bolj raz\u0161irjeni. Razlogov je mnogo, toda vsi se nana\u0161ajo na dostopnost, preprostost in dosego prakti\u010dnih rezultatov. Je klastirizacija ali celo nevralno mre\u017eno modeliranje nova tehnologija? <\/p>\n<p><\/p>\n<p>Seveda ne, vendar trenutno ni potrebno napisati stotine tiso\u010d vrstic kode, da bi zagnali en model, stro\u0161ki za ustvarjanje in uporabo modelov pa postajajo vse manj\u0161i.<\/p>\n<p><\/p>\n<p>Orodja se razvijajo \u2014 medtem ko nimamo popolnoma GUI usmerjenih AI\/ML orodij, napredek, ki smo mu pri\u010da pri mnogih drugih razredih informacijskih sistemov, na primer BI (od pisanja kode do uporabe okvirov in GUI usmerjenih re\u0161itev), se ka\u017ee tudi v orodjih za ustvarjanje AI\/ML. \u017de smo presegli fazo pisanja kode in danes uporabljamo okvire za gradnjo in usposabljanje modelov.<\/p>\n<p><\/p>\n<p>Druge izbolj\u0161ave, kot je mo\u017enost \u0161irjenja predizobra\u017eene modela, ko kon\u010dni uporabnik preprosto dopolni usposabljanje modela s svojimi specifi\u010dnimi podatki, prav tako poenostavljajo za\u010detek uporabe strojnega u\u010denja. Te dose\u017eke znatno olaj\u0161ajo u\u010denje strojnega u\u010denja, tako za strokovnjake kot za podjetja na splo\u0161no.<\/p>\n<p><\/p>\n<p>Po drugi strani pa zbiramo vse ve\u010d podatkov. Hvala enotni podatkovni platformi, kot je InterSystems IRIS, se lahko vse te informacije takoj pripravijo in uporabijo kot izhodni podatki za modele strojnega u\u010denja.<\/p>\n<p><\/p>\n<p>Z prehodom na oblak je zagon AI\/ML projektov la\u017eji kot kdajkoli. Porabimo lahko le tiste vire, ki jih potrebujemo. Poleg tega, zahvaljujo\u010d paralelizaciji, ki jo ponujajo oblaki, lahko prihranimo \u010das.<\/p>\n<p><\/p>\n<p>Ampak kak\u0161ni so rezultati? Tukaj postane vse bolj zapleteno. Obstaja veliko orodij za gradnjo modelov, o katerih bom govoril naprej. Zgraditi dober model ni preprosto, toda kaj potem? Pridobitev koristi od uporabe modela v podjetju je prav tako nenavadna naloga. Koren te\u017eave je v razdelitvi analiti\u010dnih in transakcijskih obremenitev ter modelov podatkov. Ko u\u010dimo model, to obi\u010dajno po\u010dnemo na zgodovinskih podatkih. Toda prostor za zgrajen model je v transakcijskem obdelovanju podatkov. Kak\u0161na korist je od najbolj\u0161ega modela za odkritje goljufivih transakcij, \u010de ga izvajamo enkrat na dan? Goljufije so \u017ee zdavnaj pobegnile z denarjem. Potrebujemo, da model usposobimo na zgodovinskih podatkih, vendar ga moramo tudi uporabljati v realnem \u010dasu na novih podatkih, da na\u0161i poslovni procesi delujejo v skladu s napovedmi, ki jih model pripravi.<\/p>\n<p><\/p>\n<p>ML Toolkit je nabor orodij, ki je zasnovan prav za to: zdru\u017eiti modele in transakcijsko okolje, da se zgrajeni modeli lahko enostavno uporabljajo neposredno v va\u0161ih poslovnih procesih. Python Gateway je del ML Toolkit in omogo\u010da integracijo z jezikom Python (podobno kot R Gateway, ki je del ML Toolkit in omogo\u010da integracijo z jezikom R).<\/p>\n<p><\/p>\n<h1 id=\"instrumentariy\">Orodja<\/h1>\n<p><\/p>\n<p>Preden nadaljujemo, bi \u017eelel opisati nekaj orodij in knji\u017enic za Python, ki jih bomo uporabili kasneje.<\/p>\n<p><\/p>\n<h2 id=\"tehnologii\">Tehnologije<\/h2>\n<p><\/p>\n<ul>\n<li>Python je interpretiran, visoko nivojski jezik za splo\u0161no rabo. Glavna prednost jezika je obse\u017ena knji\u017enica matemati\u010dnih, ML- in AI-knji\u017enic. Tako kot ObjectScript je to objektno orientiran jezik, a vse se dolo\u010di dinami\u010dno, ne stati\u010dno. Vse je tudi predmet. Kasnej\u0161i \u010dlanki predlagajo povr\u0161no seznanitev z jezikom. \u010ce \u017eelite za\u010deti z u\u010denjem, priporo\u010dam, da za\u010dnete s <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.python.org\/3.6\/tutorial\/index.html\">dokumenti<\/a><\/noindex>.<\/li>\n<li>Za na\u0161e naslednje vaje namestite <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: Uporabljam <noindex><a rel=\"nofollow\" href=\"https:\/\/www.jetbrains.com\/pycharm\/\">PyCharm<\/a><\/noindex>, vendar so na voljo tudi druga orodja. <noindex><a rel=\"nofollow\" href=\"https:\/\/realpython.com\/python-ides-code-editors-guide\/\">mnogi<\/a><\/noindex>. \u010ce uporabljate Atelier, obstaja Eclipse vti\u010dnik za razvijalce v Pythonu. \u010ce uporabljate VS Code, obstaja raz\u0161iritev za Python. <\/li>\n<li>Zvezek: namesto IDE lahko pi\u0161ete in delite svoje skripte v spletnih zvezkih. Najbolj priljubljen med njimi je <noindex><a rel=\"nofollow\" href=\"https:\/\/jupyter.org\/\">Jupyter<\/a><\/noindex>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"biblioteki\">Knji\u017enice<\/h2>\n<p><\/p>\n<p>Tukaj je (nepopoln) seznam knji\u017enic za strojno u\u010denje:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.numpy.org\/\">Numpy<\/a><\/noindex> \u2014 temeljni paket za natan\u010dne izra\u010dune.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pandas.pydata.org\/\">Pandas<\/a><\/noindex> \u2014 visoko zmogljive podatkovne strukture in orodja za analizo podatkov.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/matplotlib.org\/\">Matplotlib<\/a><\/noindex> \u2014 ustvarjanje grafikonov.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/seaborn.pydata.org\/\">Seaborn<\/a><\/noindex> \u2014 vizualizacija podatkov, ki temelji na matplotlib.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/scikit-learn.org\/stable\/\">Sklearn<\/a><\/noindex> \u2014 metode strojnega u\u010denja.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/xgboost.readthedocs.io\/en\/latest\/index.html\">XGBoost<\/a><\/noindex> \u2014 algoritmi strojnega u\u010denja v okviru metodologije gradientnega boostanja (Gradient Boosting).<\/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 nevronske mre\u017ee.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.tensorflow.org\/\">Tensorflow<\/a><\/noindex> \u2014 platforma za ustvarjanje modelov strojnega u\u010denja.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/pytorch.org\/\">PyTorch<\/a><\/noindex> \u2014 platforma za ustvarjanje modelov strojnega u\u010denja, usmerjena na Python.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nyoka-pmml\/nyoka\">Nyoka<\/a><\/noindex> \u2014 PMML iz razli\u010dnih modelov.<\/li>\n<\/ul>\n<p><\/p>\n<p>Tehnologije AI\/ML omogo\u010dajo podjetjem, da postanejo bolj u\u010dinkovita in prilagodljiva. Poleg tega postajajo te tehnologije danes enostavnej\u0161e za razvoj in uvedbo. Za\u010dnite raziskovati AI\/ML tehnologije in kako lahko pomagajo va\u0161i organizaciji rasti.<\/p>\n<p><\/p>\n<h1 id=\"ustanovka\">Namestitev<\/h1>\n<p><\/p>\n<p>Obstaja ve\u010d na\u010dinov za namestitev in uporabo Python Gateway:<\/p>\n<p><\/p>\n<ul>\n<li>OS\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>Uporabite sliko iz DockerHub<\/li>\n<li>Ustvarite svojo lastno sliko<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Ne glede na na\u010din namestitve boste potrebovali izvorno kodo. Edino mesto za prenos kode je <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">stran z izdajami<\/a><\/noindex>. Vsebuje testirane stabilne izdaje, preprosto prenesite zadnjo. Trenutno je to 0.8, vendar bodo s\u010dasoma na voljo nove razli\u010dice. Ne kloonirajte\/nalagajte repozitorija, temve\u010d prenesite zadnjo izdajo.<\/p>\n<p><\/p>\n<h2 id=\"os\">OS<\/h2>\n<p><\/p>\n<p>\u010ce namestite Python Gateway v operacijski sistem, morate najprej (ne glede na operacijski sistem) namestiti Python. Za to:<\/p>\n<p><\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Namestite Python 3.6.7 64 bit<\/a><\/noindex>. Priporo\u010dljivo je, da Python namestite v privzeto mapo.<\/li>\n<li>Namestite modul <code>dill<\/code>: <code>pip install dill<\/code>.<\/li>\n<li>Prenesite kodo ObjectScript (tj. <code>do $system.OBJ.ImportDir(\"C:InterSystemsReposPythoniscpy\", \"*.cls\", \"c\", , 1)<\/code>) v katero koli podro\u010dje s produkti. \u010ce \u017eelite, da obstoje\u010de podro\u010dje podpira produkte, izvedite: <code>write ##class(%EnsembleMgr).EnableNamespace($Namespace, 1)<\/code>.<\/li>\n<li>Postavite <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/releases\">callout DLL\/SO\/DYLIB<\/a><\/noindex> v mapo <code>bin<\/code> va\u0161ega primera InterSystems IRIS. Datoteka knji\u017enice mora biti dostopna na poti, vrnjeni z <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>Prepri\u010dajte se, da spremenljivka okolja <code>PYTHONHOME<\/code> poka\u017ee na Python 3.6.7.<\/li>\n<li>Prepri\u010dajte se, da sistemska spremenljivka okolja <code>PATH<\/code> vsebuje spremenljivko <code>PYTHONHOME<\/code> (ali mapo, na katero ka\u017ee).<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"linux-debianubuntu\">Linux (Debian\/Ubuntu)<\/h3>\n<p><\/p>\n<ol>\n<li>Preverite, da spremenljivka okolja <code>PATH<\/code> vsebuje <code>\/usr\/lib<\/code> in <code>\/usr\/lib\/x86_64-linux-gnu<\/code>. Uporabite datoteko <code>\/etc\/environment<\/code> za nastavitev spremenljivk okolja.<\/li>\n<li>V primeru napak <code>undefined symbol: _Py_TrueStruct<\/code> nastavite nastavitev <code>PythonLib<\/code>. Prav tako v <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme<\/a><\/noindex> je razdelek za odpravljanje te\u017eav.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"mac\">Mac<\/h3>\n<p><\/p>\n<ol>\n<li>Trenutno je podprt samo Python 3.6.7 iz <noindex><a rel=\"nofollow\" href=\"https:\/\/www.python.org\/downloads\/release\/python-367\/\">Python.org<\/a><\/noindex>. Preverite spremenljivko <code>PATH<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>\u010ce ste spreminjali spremenljivke okolja, ponovno za\u017eenite svoj izdelek InterSystems.<\/p>\n<p><\/p>\n<h2 id=\"docker\">Docker<\/h2>\n<p><\/p>\n<p>Uporaba kontejnerjev ima vrsto prednosti: <\/p>\n<p><\/p>\n<ul>\n<li>Prijenosnost<\/li>\n<li>U\u010dinkovitost<\/li>\n<li>Izolacija<\/li>\n<li>Lahkost<\/li>\n<li>Imutabilnost<\/li>\n<\/ul>\n<p><\/p>\n<p>Seznanite se s to <noindex><a rel=\"nofollow\" href=\"https:\/\/community.intersystems.com\/post\/continuous-delivery-your-intersystems-solution-using-gitlab-part-v-why-containers\">serijo \u010dlankov<\/a><\/noindex> za podrobnej\u0161e informacije o uporabi Dockerja s produkti InterSystems. <\/p>\n<p><\/p>\n<p>Vse razli\u010dice Python Gateway so trenutno osnovane na kontejnerjih. <code>2019.4<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"gotovyy-obraz\">Kon\u010dni slika<\/h3>\n<p><\/p>\n<p>Izvedite: <code>docker run -d -p 52773:52773 --name irispy intersystemscommunity\/irispy-community:latest<\/code>, da prenesete in za\u017eenete Python Gateway z izdajo Community Edition InterSystems IRIS. To je to.<\/p>\n<p><\/p>\n<h3 id=\"sozdayte-svoy-sobstvennyy-obraz\">Ustvarite svojo lastno sliko<\/h3>\n<p><\/p>\n<p>Za izdelavo Docker slike izvedite v korenu repozitorija: <code>docker build --force-rm --tag intersystemscommunity\/irispy:latest .<\/code>.<br \/>\nPrivzeto se slika gradi na osnovi slike <code>store\/intersystems\/iris-community:2019.4.0.383.0<\/code>, vendar jo lahko spremenite tako, da nastavite spremenljivko <code>IMAGE<\/code>.<br \/>\nZa izgradnju iz InterSystems IRIS izvr\u0161ite: `docker build --build-arg IMAGE=store\/intersystems\/iris:2019.4.0.383.0 --force-rm --tag intersystemscommunity\/irispy:latest &lt;.<\/p>\n<p><\/p>\n<p>Po tem lahko za\u017eenete Docker sliko:<\/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>\u010ce uporabljate sliko, osnovano na Community Edition InterSystems IRIS, klju\u010d morda ni potreben.<\/p>\n<p><\/p>\n<h3 id=\"kommentarii\">Komentarji<\/h3>\n<p><\/p>\n<ul>\n<li>Preskusni postopek <code>isc.py.test.Process<\/code> shranjuje ve\u010d slik v za\u010dasni imenik. Morda boste \u017eeleli spremeniti to pot v pritrjen imenik. To lahko storite tako, da uredite nastavitev <code>WorkingDir<\/code> z navedbo pritrjenega imenika.<\/li>\n<li>Za dostop do terminala izvedite: <code>docker exec -it irispy sh<\/code>.<\/li>\n<li>Dostop do Upravnega Portala Sistema z uporabni\u0161kim imenom <code>SuperUser<\/code>\/<code>SYS<\/code>.<\/li>\n<li>Da zaustavite vsebnik, izvedite: <code>docker stop irispy &amp;&amp; docker rm --force irispy<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"proverka-ustanovki\">Preverjanje namestitve<\/h2>\n<p><\/p>\n<p>Potem ko ste namestili Python Gateway, je smiselno preveriti, ali deluje. Izvedite ta koda v terminalu 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(\"x='HELLO'\", \"x\", , .var).\nwrite var<\/code><\/pre>\n<p><\/p>\n<p>Rezultat mora biti: <code>HELLO<\/code> \u2014 vrednost Python spremenljivke. <code>x<\/code>\u010ce je vrnjeni status <code>sc<\/code> napaka ali <code>var<\/code> prazno, preverite <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\">Readme \u2014 oddelek za odpravljanje te\u017eav.<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"api\">API<\/h1>\n<p><\/p>\n<p>Python Gateway je name\u0161\u010den in ste se prepri\u010dali, da deluje. \u010cas je, da ga za\u010dnete uporabljati!<br \/>\nGlavni vmesnik za Python je <code>isc.py.Main<\/code>. Ponudil bo naslednje skupine metod (vse vra\u010dajo <code>%Status<\/code>):<\/p>\n<p><\/p>\n<ul>\n<li>Izvr\u0161evanje kode<\/li>\n<li>Prenos podatkov<\/li>\n<li>Pomo\u017ene<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"ispolnenie-koda\">Izvr\u0161evanje kode<\/h2>\n<p><\/p>\n<p>Te metode omogo\u010dajo izvajanje poljubne Python kode.<\/p>\n<p><\/p>\n<h3 id=\"simplestring\">SimpleString<\/h3>\n<p><\/p>\n<p><code>SimpleString<\/code> \u2014 to je glavna metoda. Sprejema 4 neobvezne argumente:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 niz kode za izvedbo. Znak za prelom vrstice: <code>$c(10)<\/code>.<\/li>\n<li><code>returnVariable<\/code> \u2014 ime spremenljivke za vra\u010dilo.<\/li>\n<li><code>serialization<\/code> \u2014 kako serilizirati. <code>returnVariable<\/code>0 \u2014 niz (privzeto), 1 \u2014 repr.<\/li>\n<li><code>result<\/code> \u2014 ByRef referenca na spremenljivko, v katero se shrani vrednost. <code>returnVariable<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Zgoraj smo izvedli:<\/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>V tem primeru dodeljujemo Python spremenljivki <code>x<\/code> i(j), ki je \u0161ifrirana z javnim klju\u010dem <code>Zdravo<\/code> in \u017eelimo vrniti vrednost Python spremenljivke <code>x<\/code> v spremenljivko ObjectScript. <code>var<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"executecode\">ExecuteCode<\/h3>\n<p><\/p>\n<p>ExecuteCode je varnej\u0161a in manj omejena alternativa. <code>SimpleString<\/code>.<br \/>\nNizi v platformi InterSystems IRIS so omejeni na 3 641 144 znakov, in \u010de \u017eelite izvesti dalj\u0161i kos kode, morate uporabiti tokove.<br \/>\nSprejema dve argumenti:<\/p>\n<p><\/p>\n<ul>\n<li><code>code<\/code> \u2014 niz ali tok Python kode za izvajanje.<\/li>\n<li><code>variable<\/code> \u2014 (neobvezno) dodeli rezultat izvajanja <code>code<\/code> te spremenljivke Python.<\/li>\n<\/ul>\n<p><\/p>\n<p>Primer uporabe:<\/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>V tem primeru pomno\u017eimo 2 in 3 ter shranimo rezultat v Python spremenljivko. <code>y<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"peredacha-dannyh\">Prenos podatkov<\/h2>\n<p><\/p>\n<p>Predajte podatke v Python in nazaj.<\/p>\n<p><\/p>\n<h3 id=\"python---intersystems-iris\">Python -&gt; InterSystems IRIS<\/h3>\n<p><\/p>\n<p>Obstajajo 4 na\u010dini, kako pridobiti vrednost Python spremenljivke v InterSystems IRIS, odvisno od serilizacije, ki jo potrebujete:<\/p>\n<p><\/p>\n<ul>\n<li><code>Niz<\/code> za preproste tipe podatkov in odpravljanje napak.<\/li>\n<li><code>Repr<\/code> za shranjevanje preprostih objektov in odpravljanje napak.<\/li>\n<li><code>JSON<\/code> za enostavno manipulacijo podatkov na strani InterSystems IRIS.<\/li>\n<li><code>Pickle<\/code> za shranjevanje objektov.<\/li>\n<\/ul>\n<p><\/p>\n<p>Te metode omogo\u010dajo pridobivanje spremenljivk iz Python kot nizov ali tokov.<\/p>\n<p><\/p>\n<ul>\n<li><code>GetVariable(variable, serialization, .stream, useString)<\/code> \u2014 pridobi <code>serialization<\/code> varijabla <code>variable<\/code> u <code>stream<\/code>. \u0415\u0441\u043b\u0438 <code>useString<\/code> je enako 1 in serializacija je v nizu, vrne niz, ne tok.<\/li>\n<li><code>GetVariableJson(variable, .stream, useString)<\/code> \u2014 pridobi JSON serializacijo spremenljivke.<\/li>\n<li><code>GetVariablePickle(variable, .stream, useString, useDill)<\/code> \u2014 pridobi Pickle (ali Dill) serializacijo spremenljivke.<\/li>\n<\/ul>\n<p><\/p>\n<p>Poskusimo pridobiti na\u0161o spremenljivko <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>Nalaganje podatkov iz InterSystems IRIS v Python.<\/p>\n<p><\/p>\n<ul>\n<li><code>ExecuteQuery(query, variable, type, namespace)<\/code> \u2014 ustvari nabor podatkov (pandas <code>dataframe<\/code> ili <code>list<\/code>) iz sql poizvedbe in ga nastavi v Python spremenljivko. <code>variable<\/code>. Paket <code>isc.py<\/code> mora biti dostopen v obmo\u010dju <code>namespace<\/code> \u2014 tam bo poizvedba izvedena.<\/li>\n<li><code>ExecuteGlobal(global, variable, type, start, end, mask, labels, namespace)<\/code> \u2014 nalaga podatke iz globalne spremenljivke <code>global<\/code> iz subindeksa <code>start<\/code> do <code>end<\/code> v Python kot spremenljivko tipa <code>type<\/code>: <code>list<\/code>, bodisi pandas <code>dataframe<\/code>. Opis opcijskih argumentov <code>mask<\/code> in <code>labels<\/code> je na voljo v dokumentaciji razreda in repozitoriju <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Dokumenti za prenos podatkov<\/a><\/noindex>.<\/li>\n<li><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 nalaga podatke iz razreda <code>class<\/code> iz id <code>start<\/code> do <code>end<\/code> v Python kot spremenljivko tipa <code>type<\/code>: <code>list<\/code>, bodisi pandas <code>dataframe<\/code>. <code>properties<\/code> \u2014 seznam (lo\u010dilnik \u2014 vejica) lastnosti razreda, ki jih je treba nalo\u017eiti v nabor podatkov. Podprti so maske. <code>*<\/code> in <code>?<\/code>. Privzeto \u2014 <code>*<\/code> (vse lastnosti). Lastnost <code>%%CLASSNAME<\/code> je prezrta.<\/li>\n<li><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 nalaga podatke iz tabele <code>tabela<\/code> iz id <code>start<\/code> do <code>end<\/code> v Python.<\/li>\n<\/ul>\n<p><\/p>\n<p><code>ExecuteQuery<\/code> je univerzalen (vsaka veljavna SQL poizvedba bo poslana v Python). Vendar pa <code>ExecuteGlobal<\/code> in njegovi ovitki <code>ExecuteClass<\/code> in <code>ExecuteTable<\/code> delujejo z dolo\u010denimi omejitvami. So precej hitrej\u0161i (3-5 krat hitrej\u0161i od ODBC gonilnika in 20 krat hitrej\u0161i <code>ExecuteQuery<\/code>). Dodatne informacije v <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/DataTransfer.md\">Dokumenti za prenos podatkov<\/a><\/noindex>.<br \/>\nVse te metode podpirajo prenos podatkov iz katerega koli obmo\u010dja. Paket <code>isc.py<\/code> mora biti dostopen v ciljnem obmo\u010dju.<\/p>\n<p><\/p>\n<h3 id=\"executequery\">ExecuteQuery<\/h3>\n<p><\/p>\n<p><code>ExecuteQuery(request, variable, type, namespace)<\/code> \u2014 prenos rezultatov katere koli veljavne SQL poizvedbe v Python. To je najpo\u010dasnej\u0161a metoda prenosa podatkov. Uporabite jo, \u010de <code>ExecuteGlobal<\/code> in njegovi ovitki niso na voljo.<\/p>\n<p><\/p>\n<p>Argumenti:<\/p>\n<p><\/p>\n<ul>\n<li><code>query<\/code> \u2014 sql poizvedba.<\/li>\n<li><code>variable<\/code> \u2014 ime Python spremenljivke, v katero se zapi\u0161ejo podatki.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> ali Pandas <code>dataframe<\/code>.<\/li>\n<li><code>namespace<\/code> \u2014 obmo\u010dje, v katerem bo poizvedba izvedena.<\/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 prenos globalne spremenljivke v Python.<\/p>\n<p><\/p>\n<p>Argumenti:<\/p>\n<p><\/p>\n<ul>\n<li><code>global<\/code> \u2014 ime globalne spremenljivke brez <code>^<\/code><\/li>\n<li><code>variable<\/code> \u2014 ime Python spremenljivke, v katero se zapi\u0161ejo podatki.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> ali Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 prvi subindeks globalne spremenljivke. Obvezno <code>%Integer<\/code>.<\/li>\n<li><code>end<\/code> \u2014 zadnji subindeks globalne spremenljivke. Obvezno <code>%Integer<\/code>.<\/li>\n<li><code>mask<\/code> \u2014 obrazec vrednosti globalne spremenljivke. Obrazec je lahko kraj\u0161\u00ed kot \u0161tevilo polj v globalni spremenljivki (v tem primeru bodo polja na koncu izpu\u0161\u010dena). Kako oblike obrazec:\n<ul>\n<li><code>+<\/code> predlo\u017eite vrednost tak\u0161no, kot je.<\/li>\n<li><code>-<\/code> izpustite to vrednost.<\/li>\n<li><code>b<\/code> \u2014 Logi\u010dna vrsta (<code>0<\/code> \u2014 <code>False<\/code>, vse ostalo \u2014 <code>True<\/code>).<\/li>\n<li><code>d<\/code> \u2014 Datum (iz $horolog, na Windows od 1970, na Linux od 1900).<\/li>\n<li><code>t<\/code> \u2014 \u010cas ($horolog, sekunde po polno\u010di).<\/li>\n<li><code>m<\/code> \u2014 \u010casovna oznaka (niz formata LETO-MESEC-DAN HOUR:MINUTE:SECOND).<\/li>\n<\/ul>\n<\/li>\n<li><code>labels<\/code> \u2014 %Seznam imen stolpcev. Prvi element \u2014 ime podskripta.<\/li>\n<li><code>namespace<\/code> \u2014 obmo\u010dje, v katerem bo poizvedba izvedena.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"executeclass\">ExecuteClass<\/h3>\n<p><\/p>\n<p>Ohitika nad <code>ExecuteGlobal<\/code>. Na podlagi definicije razreda pripravi klic <code>ExecuteGlobal<\/code> in ga izvede.<\/p>\n<p><\/p>\n<p><code>ExecuteClass(class, variable, type, start, end, properties, namespace)<\/code> \u2014 prenos podatkov razreda v Python.<\/p>\n<p><\/p>\n<p>Argumenti:<\/p>\n<p><\/p>\n<ul>\n<li><code>class<\/code> \u2014 ime razreda<\/li>\n<li><code>variable<\/code> \u2014 ime Python spremenljivke, v katero se zapi\u0161ejo podatki.<\/li>\n<li><code>type<\/code> \u2014 <code>list<\/code> ali Pandas <code>dataframe<\/code>.<\/li>\n<li><code>start<\/code> \u2014 za\u010detni Id.<\/li>\n<li><code>end<\/code> \u2014 kon\u010dni Id<\/li>\n<li><code>properties<\/code> \u2014 seznam (lo\u010dilnik \u2014 vejica) lastnosti razreda, ki jih je treba nalo\u017eiti v nabor podatkov. Podprti so maske. <code>*<\/code> in <code>?<\/code>. Privzeto \u2014 <code>*<\/code> (vse lastnosti). Lastnost <code>%%CLASSNAME<\/code> je prezrta.<\/li>\n<li><code>namespace<\/code> \u2014 obmo\u010dje, v katerem bo poizvedba izvedena.<\/li>\n<\/ul>\n<p><\/p>\n<p>Vse lastnosti se prenesejo tak\u0161ne kot so razen lastnosti tipov <code>te<\/code>, <code>%\u010cas<\/code>, <code>%Logi\u010dna vrednost<\/code> in <code>%\u010casovna oznaka<\/code> \u2014 te se pretvorijo v ustrezne razrede Python.<\/p>\n<p><\/p>\n<h3 id=\"executetable\">ExecuteTable<\/h3>\n<p><\/p>\n<p>Ohitika nad <code>ExecuteClass<\/code>. Pretvori ime tabele v ime razreda in izvede <code>ExecuteClass<\/code>. Podpis:<\/p>\n<p><\/p>\n<p><code>ExecuteTable(table, variable, type, start, end, properties, namespace)<\/code> \u2014 prenos podatkov tabele v Python.<\/p>\n<p><\/p>\n<p>Argumenti:<\/p>\n<p><\/p>\n<ul>\n<li><code>tabela<\/code> \u2014 ime tabele.<br \/>\nVsi drugi argumenti se prenesejo tak\u0161ni kot so v <code>ExecuteClass<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"zametki\">Opombe<\/h3>\n<p><\/p>\n<ul>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> in <code>ExecuteTable<\/code> delujejo enako hitro.<\/li>\n<li><code>ExecuteGlobal<\/code> 20-krat hitreje kot <code>ExecuteQuery<\/code> na velikih skladi\u0161\u010dih podatkov (\u010das prenosa ve\u010d kot &gt;0.01 sekunde).<\/li>\n<li><code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> in <code>ExecuteTable<\/code> delujejo na globalnih spremenljivkah s to strukturo: <code>^global(key) = $lb(prop1, prop2, ..., propN)<\/code> kjer <code>key<\/code> \u2014 celo \u0161tevilo.<\/li>\n<li>Za <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> in <code>ExecuteTable<\/code> podprte vrednosti <code>te<\/code> ustrezajo obsegu <code>mktime<\/code> in so odvisne od operacijskega sistema (<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>). Uporabite <code>%\u010casovna oznaka<\/code>za prenos podatkov izven tega obsega ali uporabite pandas dataframe, saj je to omejitev samo za seznam.<\/li>\n<li>Za <code>ExecuteGlobal<\/code>, <code>ExecuteClass<\/code> in <code>ExecuteTable<\/code> vsi argumenti, razen vira podatkov (globalne spremenljivke, razreda ali tabele) in spremenljivka so opcijski.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"primery\">Primeri<\/h2>\n<p><\/p>\n<p>Testni razred <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/blob\/master\/isc\/py\/test\/Person.cls\">isc.py.test.Oseba<\/a><\/noindex> vsebuje metodo, ki prikazuje vse mo\u017enosti prenosa podatkov:<\/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\/\/ Op\u0161ti argumenti\nset variable = \"df\"\nset type = \"dataframe\"\nset start = 1\nset end = $g(^isc.py.test.PersonD, start)\n\n\/\/ Na\u010din 0: ExecuteGlobal bez argumenata\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 0, type)\n\n\/\/ Na\u010din 1: ExecuteGlobal sa argumentima    \n\/\/ Kada se prenosi global, nazivi polja se postavljaju ru\u010dno\n\/\/ globalKey - naziv subscript-a \nset labels = $lb(\"globalKey\", \"Name\", \"DOB\", \"TS\", \"RandomTime\", \"AgeYears\", \"AgeDecimal\", \"AgeDouble\", \"Bool\")\n\n\/\/ mask sadr\u017ei jedan element manje nego labels jer je \"globalKey\" - naziv subscript-a\n\/\/ Presko\u010dite %%CLASSNAME\nset mask = \"-+dmt+++b\"\n\nset sc = ##class(isc.py.Main).ExecuteGlobal(global, variable _ 1, type, start, end, mask, labels)\n\n\/\/ Na\u010din 2: ExecuteClass\nset sc = ##class(isc.py.Main).ExecuteClass(class, variable _ 2, type, start, end)\n\n\/\/ Na\u010din 3: ExecuteTable\nset sc = ##class(isc.py.Main).ExecuteTable(table, variable _ 3, type, start, end)\n\n\/\/ Na\u010din 4: ExecuteQuery\nset sc = ##class(isc.py.Main).ExecuteQuery(query, variable _ 4, type)<\/code><\/pre>\n<p><\/p>\n<p>\u0418\u0437\u0432\u0438\u043a\u0430\u0439\u0442\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <code>do ##class(isc.py.test.Person).Test()<\/code> \u0437\u0430 \u0434\u0430 \u0432\u0438\u0434\u0438\u0442\u0435 \u043a\u0430\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0430\u0442 \u0432\u0441\u0438\u0447\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u0434\u0430\u043d\u043d\u0438.<\/p>\n<p><\/p>\n<h2 id=\"vspomogatelnye-metody\">\u041f\u043e\u043c\u043e\u0449\u043d\u0438 \u043c\u0435\u0442\u043e\u0434\u0438<\/h2>\n<p><\/p>\n<ul>\n<li><code>GetVariableInfo(variable, serialization, .defined, .type, .length)<\/code> \u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0430\u0442\u0430: \u0434\u0430\u043b\u0438 \u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430, \u043a\u043b\u0430\u0441 \u0438 \u0434\u044a\u043b\u0436\u0438\u043d\u0430 \u043d\u0430 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f.<\/li>\n<li><code>GetVariableDefined(variable, .defined)<\/code> \u2014 \u0434\u0430\u043b\u0438 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0430\u0442\u0430 \u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430.<\/li>\n<li><code>GetVariableType(variable, .type)<\/code> \u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430\u0442\u0435 \u043a\u043b\u0430\u0441\u0430 \u043d\u0430 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0430\u0442\u0430.<\/li>\n<li><code>GetStatus()<\/code> \u2014 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0438 \u043f\u0440\u0435\u043c\u0430\u0445\u043d\u0435\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u043e\u0442\u043e \u0438\u0437\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043e\u0442 \u0441\u0442\u0440\u0430\u043d\u0430 \u043d\u0430 Python.<\/li>\n<li><code>GetModuleInfo(module, .imported, .alias)<\/code> \u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430\u0442\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0430\u0442\u0430 \u043d\u0430 \u043c\u043e\u0434\u0443\u043b\u0430 \u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430 \u043d\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430.<\/li>\n<li><code>GetFunctionInfo(function, .defined, .type, .docs, .signature, .arguments)<\/code> \u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430\u0442\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0442\u0430.<\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"interoperabelnost\">Interoperabilnost<\/h1>\n<p><\/p>\n<p>\u041d\u0430\u0443\u0447\u0438\u0445\u0442\u0435 \u0441\u0435 \u043a\u0430\u043a \u0434\u0430 \u0438\u0437\u0432\u0438\u043a\u0432\u0430\u0442\u0435 Python Gateway \u043e\u0442 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u043b\u0430, \u0441\u0435\u0433\u0430 \u0449\u0435 \u0437\u0430\u043f\u043e\u0447\u043d\u0435\u043c \u0434\u0430 \u0433\u043e \u0438\u0437\u043f\u043e\u043b\u0437\u0432\u0430\u043c\u0435 \u0432 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u044f\u0442\u0430. \u041e\u0441\u043d\u043e\u0432\u0430\u0442\u0430 \u043d\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u0442\u043e \u0441 Python \u0432 \u0442\u043e\u0437\u0438 \u0440\u0435\u0436\u0438\u043c \u2014 <code>isc.py.ens.Operation<\/code>. \u0422\u043e\u0439 \u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0432\u0430:<\/p>\n<p><\/p>\n<ul>\n<li>\u0414\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u044f\u0432\u0430\u043c\u0435 \u043a\u043e\u0434 \u043d\u0430 Python<\/li>\n<li>\u0414\u0430 \u0437\u0430\u043f\u0430\u0437\u0432\u0430\u043c\u0435\/\u0432\u044a\u0437\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0432\u0430\u043c\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430 Python<\/li>\n<li>\u0414\u0430 \u0437\u0430\u0440\u0435\u0436\u0434\u0430\u043c\u0435 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0432\u0430\u043c\u0435 \u0434\u0430\u043d\u043d\u0438 \u043e\u0442 Python<\/li>\n<\/ul>\n<p><\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0442\u0430 \u043d\u0430 Pyhton \u0435 \u043e\u0431\u0432\u0438\u0432\u043a\u0430 \u043e\u043a\u043e\u043b\u043e <code>isc.py.Main<\/code>. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0442\u0430 <code>isc.py.ens.Operation<\/code> \u0434\u0430\u0432\u0430 \u0432\u044a\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442 \u0437\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0430 \u043d\u0430 Python \u043e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0446\u0438\u0438\u0442\u0435 \u043d\u0430 InterSystems IRIS. \u041f\u043e\u0434\u0434\u044a\u0440\u0436\u0430\u0442 \u0441\u0435 \u043f\u0435\u0442 \u0437\u0430\u044f\u0432\u043a\u0438:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.ExecutionRequest<\/code> \u0437\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 Python \u043a\u043e\u0434. \u0412\u0440\u044a\u0449\u0430 <code>isc.py.msg.ExecutionResponse<\/code> \u0441 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0430 \u043e\u0442 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435\u0442\u043e \u0438 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0438\u0442\u0435 \u043d\u0430 \u0437\u0430\u043f\u0438\u0442\u0430\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438.<\/li>\n<li><code>isc.py.msg.StreamExecutionRequest<\/code> \u0437\u0430 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 Python \u043a\u043e\u0434. \u0412\u0440\u044a\u0449\u0430 <code>isc.py.msg.StreamExecutionResponse<\/code> \u0441 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0430 \u043e\u0442 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435\u0442\u043e \u0438 \u0441\u0442\u043e\u0439\u043d\u043e\u0441\u0442\u0438\u0442\u0435 \u043d\u0430 \u0437\u0430\u043f\u0438\u0442\u0430\u043d\u0438\u0442\u0435 \u043f\u0440\u043e\u043c\u0435\u043d\u043b\u0438\u0432\u0438. \u041f\u043e\u0434\u043e\u0431\u043d\u043e \u043d\u0430 <code>isc.py.msg.ExecutionRequest<\/code>, \u043d\u043e \u043f\u0440\u0438\u0435\u043c\u0430 \u0438 \u0432\u0440\u044a\u0449\u0430 \u043f\u043e\u0442\u043e\u0446\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0437\u043e\u0432\u0435.<\/li>\n<li><code>isc.py.msg.QueryRequest<\/code> \u0437\u0430 \u043f\u0440\u0435\u0434\u0430\u0432\u0430\u043d\u0435 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u0442\u0430\u0442\u0430 \u043e\u0442 \u0438\u0437\u043f\u044a\u043b\u043d\u0435\u043d\u0438\u0435\u0442\u043e \u043d\u0430 SQL \u0437\u0430\u044f\u0432\u043a\u0430. \u0412\u0440\u044a\u0449\u0430 <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> za prenos podatkov globalne\/razreda\/tabele. Vra\u010da <code>Ens.Response<\/code>.<\/li>\n<li><code>isc.py.msg.SaveRequest<\/code> za shranjevanje konteksta Python. Vra\u010da <code>Ens.StringResponse<\/code> z identifikatorjem konteksta.<\/li>\n<li>\n<p><code>isc.py.msg.RestoreRequest<\/code> za obnovitev konteksta Python.<\/p>\n<p><\/p>\n<p>Pored toga, <code>isc.py.ens.Operation<\/code> ima dve nastavitvi:<\/p>\n<p><\/p>\n<ul>\n<li><code>Initializer<\/code> \u2014 izbira razreda, ki implementira vmesnik <code>isc.py.init.Abstract<\/code>. Uporabiti se lahko za nalaganje funkcij, modulov, razredov itd. Izvr\u0161i se enkrat ob zagonu postopka.<\/li>\n<li><code>PythonLib<\/code> \u2014 (samo za Linux) \u010de opazite napake pri nalaganju, nastavi njegovo vrednost na <code>libpython3.6m.so<\/code> ali celo na polno pot do knji\u017enice Python. <\/li>\n<\/ul>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"sozdanie-biznes-processov\">Ustvarjanje poslovnih procesov<\/h2>\n<p><\/p>\n<p>Na voljo sta dva razreda, ki olaj\u0161ata razvoj poslovnih procesov:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.ens.ProcessUtils<\/code> omogo\u010da pridobivanje anotacij iz aktivnosti s podstavitvijo spremenljivk.<\/li>\n<li><code>isc.py.util.BPEmulator<\/code> omogo\u010da enostavno testiranje poslovnih procesov s Python. Izvr\u0161i lahko poslovni proces (deli v jeziku Python) v trenutnem postopku.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"podstanovka-peremennyh\">Nadome\u0161\u010danje spremenljivk.<\/h2>\n<p><\/p>\n<p>Vsi poslovni procesi, dedovani od <code>isc.py.ens.ProcessUtils<\/code>, lahko uporabijo metodo <code>GetAnnotation(name)<\/code> za pridobitev vrednosti anotacije aktivnosti po njenem imenu. Anotacija aktivnosti lahko vsebuje spremenljivke, ki bodo izra\u010dunane na strani InterSystems IRIS pred prenosom v Python. Tukaj je sintaksa podstavitve spremenljivk:<\/p>\n<p><\/p>\n<ul>\n<li><code>${class:method:arg1:...:argN}<\/code> \u2014 klic metode<\/li>\n<li><code>#{expr}<\/code> \u2014 izvr\u0161iti kodo v ObjectScript jeziku.<\/li>\n<\/ul>\n<p><\/p>\n<p>Primer je na voljo v testnem poslovnem procesu <code>isc.py.test.Process<\/code>, na primer, v aktivnosti <code>Matrika korelacije: Graf<\/code>: <code>f.savefig(r'#{process.WorkDirectory}SHOWCASE${%PopulateUtils:Integer:1:100}.png')<\/code>. V tem primeru:<\/p>\n<p><\/p>\n<ul>\n<li><code>#{process.WorkDirectory}<\/code> vrne lastnost WorkDirectory objekta <code>proces<\/code>, ki je instanca razreda <code>isc.py.test.Process<\/code> , torej trenutnega poslovnega procesa.<\/li>\n<li><code>${%PopulateUtils:Integer:1:100}<\/code> izvede metodo <code>Celo \u0161tevilo<\/code> klasa <code>%PopulateUtils<\/code>, pri \u010demer se predajajo argumenti <code>1<\/code> in <code>100<\/code>, vrne naklju\u010dno celo \u0161tevilo v razponu <code>1...100<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"testovyy-biznes-process\">Testni poslovni proces<\/h2>\n<p><\/p>\n<p>Testni izdelki in testni poslovni proces sta na voljo privzeto kot del Python Gateway. Za njihovo uporabo:<\/p>\n<p><\/p>\n<ol>\n<li>V terminalu OS izvedite: <code>pip install pandas matplotlib seaborn<\/code>. <\/li>\n<li>V terminalu InterSystems IRIS izvedite: <code>do ##class(isc.py.test.CannibalizationData).Import()<\/code> za izpolnitev testnih podatkov.<\/li>\n<li>Za\u017eenite izdelek <code>isc.py.test.Production<\/code>.<\/li>\n<li>Po\u0161lji zahtevo tipa <code>Ens.Request<\/code> u <code>isc.py.test.Process<\/code>.<\/li>\n<\/ol>\n<p><\/p>\n<p>Poglejmo, kako vse to deluje skupaj. Odprite <code>isc.py.test.Process<\/code> v BPL urejevalniku:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v 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\">Izvr\u0161evanje kode<\/h3>\n<p><\/p>\n<p>Najpomembnej\u0161i klic \u2014 izvr\u0161itev Python kode:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/dafa6b8c878ae937b194ff577b86dc89.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Uporablja se zahteva <code>isc.py.msg.ExecutionRequest<\/code>, tukaj so njene lastnosti:<\/p>\n<p><\/p>\n<ul>\n<li><code>Koda<\/code> \u2014 Python koda.<\/li>\n<li><code>SeparateLines<\/code> \u2014 ali naj se koda lo\u010di na vrstice za izvr\u0161itev. <code>$c(10)<\/code> (<code>n<\/code>) se uporablja za lo\u010devanje vrstic. Upo\u0161tevajte, da NE priporo\u010damo obdelave celotnega sporo\u010dila hkrati; ta funkcija je namenjena samo obdelavi <code>def<\/code> in podobnih ve\u010dvrsti\u010dnih izrazov. Privzeto <code>0<\/code>.<\/li>\n<li><code>Spremenljivke<\/code> \u2014 seznam spremenljivk, lo\u010denih z vejicami, ki bodo dodane v odgovor.<\/li>\n<li><code>Serializacija<\/code> \u2014 kako serializirati spremenljivke, ki jih \u017eelimo vrniti. Mo\u017enosti: <code>Str<\/code>, <code>Repr<\/code>, <code>JSON<\/code>, <code>Pickle<\/code> in <code>Dill<\/code>, privzeto <code>Str<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>V na\u0161em primeru samo nastavljamo lastnost <code>Koda<\/code>, tako da vse druge lastnosti uporabljajo privzete vrednosti. Nastavljamo jo z navedbo <code>process.GetAnnotation(\"Import pandas\")<\/code>, ki med izvajanjem vrne anotacijo po izvedbi zamenjave spremenljivk. Na koncu bo koda <code>import pandas as pd<\/code> poslana v Python. <code>GetAnnotation<\/code> je lahko koristna za pridobivanje ve\u010dvrsti\u010dnih Python skriptov, vendar ni omejitev glede te metode pridobivanja kode. Lastnost lahko nastavite <code>Koda<\/code> na kakr\u0161enkoli na\u010din, ki vam ustreza.<\/p>\n<p><\/p>\n<h3 id=\"poluchenie-peremennyh\">Pridobivanje spremenljivk<\/h3>\n<p><\/p>\n<p>\u0160e en zanimiv izziv z uporabo <code>isc.py.msg.ExecutionRequest<\/code> \u2014 <code>Korelacijska matrika: tabelari\u010dna<\/code>:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/8824e49ecaa448551c830e9a90eb5781.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Izra\u010duna Korelacijsko matriko na strani Pythona in pridobi spremenljivko <code>corrmat<\/code> nazaj v InterSystems IRIS v formatu JSON z nastavitvijo lastnosti poizvedbe:<\/p>\n<p><\/p>\n<ul>\n<li><code>Spremenljivke<\/code>: <code>\"corrmat\"<\/code><\/li>\n<li><code>Serializacija<\/code>: <code>\"JSON\"<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Rezultate lahko vidimo v Visual Trace:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v InterSystems IRIS\" src=\"\/wp-content\/uploads\/2020\/02\/713bcade8cb1018f2974cba2cab712b7.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>In \u010de potrebujemo to vrednost v BP, jo lahko pridobimo tako: <code>callresponse.Variables.GetAt(\"corrmat\")<\/code>.<\/p>\n<p><\/p>\n<h3 id=\"peredacha-dannyh-1\">Prenos podatkov<\/h3>\n<p><\/p>\n<p>Nato se bomo pogovarjali o prenosu podatkov iz InterSystems IRIS v Python; vsi poizvedbeni zahtevki za prenos podatkov uresni\u010dujejo vmesnik <code>isc.py.msg.DataRequest<\/code>, ki nudi naslednje lastnosti:<\/p>\n<p><\/p>\n<ul>\n<li><code>Variable<\/code> \u2014 Python spremenljivka, v katero se zapisujejo podatki.<\/li>\n<li><code>Tip<\/code> \u2014 tip spremenljivke: <code>dataframe<\/code> (pandas dataframe) ali <code>list<\/code>.<\/li>\n<li><code>Namespace<\/code> \u2014 obmo\u010dje, iz katerega pridobivamo podatke. Paket <code>isc.py<\/code> mora biti dostopen v tem obmo\u010dju. To je lahko obmo\u010dje brez podpore za produkcijo.<\/li>\n<\/ul>\n<p><\/p>\n<p>Na podlagi tega vmesnika so bili implementirani 4 razredi zahtevkov:<\/p>\n<p><\/p>\n<ul>\n<li><code>isc.py.msg.QueryRequest<\/code> \u2014 nastavite lastnost <code>Query<\/code> za prenos SQL poizvedbe.<\/li>\n<li><code>isc.py.msg.ClassRequest<\/code> \u2014 nastavite lastnost <code>Razred<\/code> za prenos podatkov razreda.<\/li>\n<li><code>isc.py.msg.TableRequest<\/code> \u2014 nastavite lastnost <code>\u0422\u0430\u0431\u043b\u0438\u0446\u0430<\/code> za prenos podatkov tabele.<\/li>\n<li><code>isc.py.msg.GlobalRequest<\/code> \u2014 nastavite lastnost <code>Global<\/code> za prenos podatkov globalne spremenljivke.<\/li>\n<\/ul>\n<p><\/p>\n<p>V testnem procesu si oglejte aktivnost <code>RAW<\/code>, gde <code>isc.py.msg.QueryRequest<\/code> prikazan v akciji.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v 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\">Shranjevanje\/obnovitev Python konteksta<\/h3>\n<p><\/p>\n<p>Nazadnje lahko shranimo Python kontekst v InterSystems IRIS; za to po\u0161ljemo <code>isc.py.msg.SaveRequest<\/code> z argumenti:<\/p>\n<p><\/p>\n<ul>\n<li><code>Maska<\/code> \u2014 shranijo se samo spremenljivke, ki ustrezajo maske. Podprti so <code>*<\/code> in <code>?<\/code>. Primer: <code>\"Data*, Figure?\"<\/code>. Privzeto <code>*<\/code>.<\/li>\n<li><code>MaxLength<\/code> \u2014 Najve\u010dja dol\u017eina shranjene spremenljivke. \u010ce je serializacija spremenljivke dalj\u0161a, bo ta prezrta. Nastavite 0, da omogo\u010dite spremenljivke poljubne dol\u017eine. Privzeto <code>$$$MaxStringLength<\/code>.<\/li>\n<li><code>Ime<\/code> \u2014 Ime konteksta (neobvezno).<\/li>\n<li><code>Opis<\/code> \u2014 Opis konteksta (neobvezno).<\/li>\n<\/ul>\n<p><\/p>\n<p>Vrne <code>Ens.StringResponse<\/code> z <code>Id<\/code> shranjenega konteksta. Med testnim procesom si oglejte aktivnost <code>Shrani kontekst<\/code>.<\/p>\n<p><\/p>\n<p>Ustrezno povpra\u0161evanje <code>isc.py.msg.RestoreRequest<\/code> nalo\u017ei kontekst iz InterSystems IRIS v Python:<\/p>\n<p><\/p>\n<ul>\n<li><code>ContextId<\/code> \u2014 identifikator konteksta.<\/li>\n<li><code>Po\u010disti<\/code> \u2014 po\u010disti kontekst pred obnovitvijo.<\/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 to je spletna aplikacija z odprtokodnim delovanjem, ki omogo\u010da ustvarjanje zvezkov, ki vsebujejo kodo, vizualizacije in besedilo ter njihovo objavljanje. Python Gateway omogo\u010da pregledovanje in urejanje BPL procesov v obliki Jupyter Notebook. Upo\u0161tevajte, da se trenutno uporablja obi\u010dajen izvr\u0161evalec Python 3.<\/p>\n<p><\/p>\n<p>To raz\u0161iritev predpostavlja, da anotacije vsebujejo kodo Python in uporabljajo imena aktivnosti kot predhodne naslove. Zdaj je mogo\u010de razvijati poslovne procese PythonGateway v Jupyter Notebook. To je mogo\u010de: <\/p>\n<p><\/p>\n<ul>\n<li>Ustvarjanje novih poslovnih procesov<\/li>\n<li>Brisanje poslovnih procesov<\/li>\n<li>Ustvarjanje novih aktivnosti<\/li>\n<li>Sprememba aktivnosti<\/li>\n<li>Brisanje aktivnosti<\/li>\n<\/ul>\n<p><\/p>\n<p>Evo <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/mZizgVtZ014\">demo video<\/a><\/noindex>. In nekaj posnetkov zaslona:<\/p>\n<p><\/p>\n<h2 id=\"provodnik-processov\">Raziskovalec procesov<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v 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\">Urejevalnik procesa<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Python Gateway v 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\">Namestitev<\/h2>\n<p><\/p>\n<ol>\n<li>Potrebujete InterSystems IRIS 2019.2+.<\/li>\n<li>Namestite PythonGateway v0.8+ (zahteva le <code>isc.py.util.Jupyter<\/code>, <code>isc.py.util.JupyterCheckpoints<\/code> in <code>isc.py.ens.ProcessUtils<\/code>).<\/li>\n<li>Posodobite kodo ObjectScript iz skladi\u0161\u010da.<\/li>\n<li>Izvedite <code>do ##class(isc.py.util.Jupyter).Install()<\/code> in sledite navodilom.<\/li>\n<\/ol>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/intersystems-community\/PythonGateway\/tree\/master\/jupyter\">Dokumentacija<\/a><\/noindex>.<\/p>\n<p><\/p>\n<h1 id=\"vyvody\">Zaklju\u010dki<\/h1>\n<p><\/p>\n<p>MLToolkit je niz orodij, katerega cilj je zdru\u017eevanje modelov in transakcijskega okolja, da bi bile zgrajene modele mogo\u010de enostavno uporabljati neposredno v va\u0161ih poslovnih procesih. Python Gateway je del MLToolkit in omogo\u010da integracijo z jezikom Python, kar omogo\u010da orkestracijo vseh algoritmov strojnega u\u010denja, ustvarjenih v jeziku Python (glavno okolje za \u0161tevilne podatkovne znanstvenike), ter uporabo \u0161tevilnih pripravljenih knji\u017enic za hitro ustvarjanje prilagodljivih, robotiziranih analiti\u010dnih AI\/ML re\u0161itev na platformi InterSystems IRIS.<\/p>\n<p><\/p>\n<h1 id=\"ssylki\">Povezave<\/h1>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/intersystems\/blog\/473452\/\">Prej\u0161nji \u010dlanek<\/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\">Mnenja 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\">Dokumentacija in te\u010daji o Python<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h1 id=\"mltoolkit\">MLToolkit<\/h1>\n<p><\/p>\n<p>Uporabni\u0161ka skupina MLToolkit je zasebni GitHub repozitorij, ustanovljen kot del korporativne GitHub organizacije InterSystems. Namenjena je zunanjim uporabnikom, ki namestijo, raziskujejo ali \u017ee uporabljajo komponente MLToolkit, vklju\u010dno s Python Gateway. V skupini je na voljo vrsta izvedenih primerov (z izvorno kodo in testnimi podatki) na podro\u010djih marketinga, proizvodnje, medicine in mnogih drugih panog. Da se pridru\u017eite skupini uporabnikov ML Toolkit, po\u0161ljite kratko sporo\u010dilo na elektronski naslov: <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> in v svojem sporo\u010dilu navedite naslednje informacije:<\/p>\n<p><\/p>\n<ul>\n<li>Uporabni\u0161ko ime GitHub<\/li>\n<li>Organizacija (kjer delate ali \u0161tudirate)<\/li>\n<li>Pozicija (va\u0161a stvarna pozicija u va\u0161oj organizaciji, ili \"Student\", ili \"Nezavisni\").<\/li>\n<li>Pa\u00eds<\/li>\n<\/ul>\n<p><\/p>\n<p>Tistim, ki so prebrali \u010dlanek in jih zanima, kako lahko InterSystems IRIS slu\u017ei kot platforma za razvoj ali gostovanje mehanizmov umetne inteligence in strojnega u\u010denja, ponujamo prilo\u017enost za razpravo o morebitnih scenarijih, zanimivih za va\u0161e podjetje. Z veseljem bomo analizirali potrebe va\u0161ega podjetja in skupaj opredelili akcijski na\u010drt; kontaktni naslov na\u0161e strokovne skupine AI\/ML je \u2013 <noindex><a rel=\"nofollow\" href=\"mailto:MLToolkit@intersystems.com\">MLToolkit@intersystems.com<\/a><\/noindex>.<\/p>\n<p>Izvor: <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.5 - 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\/sl\/blog\/python-gateway-v-intersystems-iris\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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 v InterSystems IRIS | ProHoster","description":"Ta \u010dlanek je posve\u010den Python Gateway \u2014 projektu skupnosti z odprto kodo za podatkovno platformo InterSystems IRIS.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/python-gateway-v-intersystems-iris","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/41221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=41221"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/41221\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/41222"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=41221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=41221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=41221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}