Python: komunikace mezi dvěma programy

Python: komunikace mezi dvěma programy
« kdy: 11. 12. 2020, 14:39:43 »
Zdravim
Otazka na expertov. Chcem si spravit 2 programy. Jeden pre OPC druhy pre GUI.
Ako ich idealne prepojit tak aby medzi nimi prebiehala komunikacia?
Zaujima ma co najlepsie riesenie.
« Poslední změna: 11. 12. 2020, 15:57:25 od Petr Krčmář »


Jose D

  • *****
  • 850
    • Zobrazit profil
Re:Python komunikacie medzi dvoma programamy
« Odpověď #1 kdy: 11. 12. 2020, 14:50:40 »
tak jestli už z nějakého důvodu používáš OPC standard, tak proč u něj nezůstat?

https://github.com/FreeOpcUa/opcua-client-gui ?

Re:Python komunikacie medzi dvoma programamy
« Odpověď #2 kdy: 11. 12. 2020, 15:23:36 »
Nejde len o OPC. Ono toho bude relativne vela. Resp rad by som docielil to aby si kazdy modul bezal pekne sam ako servis ale nieako komunikovat spolu musia. Napriklad nic sa nestane ak sa vyplne GUI ktore len zobrazuje info ale OPC a databazovy modul idu dalej. Atd atd...
Akolkovek rad by som sa trosku dovzdelal v tom ako to spravit poriadne a idealne tip od niekoho s praxe.

Vykook

  • ***
  • 135
    • Zobrazit profil
    • homepage
    • E-mail
Re:Python komunikacie medzi dvoma programamy
« Odpověď #3 kdy: 11. 12. 2020, 15:52:49 »
Pár nápadů bych měl, ale bohužel nejsem expert, takže bohužel nic :-/

Re:Python: komunikace mezi dvěma programy
« Odpověď #4 kdy: 11. 12. 2020, 18:27:42 »
IPC Socket


AgentK

  • ***
  • 129
  • Evolve or die!
    • Zobrazit profil
    • E-mail
Re:Python: komunikace mezi dvěma programy
« Odpověď #5 kdy: 11. 12. 2020, 19:46:14 »
IPC, nebo lokalni socket. Oboje je dobry a prvni volba.
Pokud to ma byt neco super-rychleho a ve velkych blocich/objemech, tak to muze byt sdilena pamet a nejaky semafor.

EDIT: Muze to byt treba i fifo na filesystemu.
EDIT2: mozna se zeptate naco AF_UNIX. Muze se to hodit na sdileni fd pomoci ancillary data.
« Poslední změna: 11. 12. 2020, 19:50:22 od AgentK »

Re:Python: komunikace mezi dvěma programy
« Odpověď #6 kdy: 12. 12. 2020, 09:51:32 »
IPC Socket je teda kvazy volba ? Ake ine metody este existuju? Pouziva sa to v praxy? Nie je lepsia volba pipes?

Ink

  • *****
  • 655
    • Zobrazit profil
    • E-mail

AgentK

  • ***
  • 129
  • Evolve or die!
    • Zobrazit profil
    • E-mail
Re:Python: komunikace mezi dvěma programy
« Odpověď #8 kdy: 12. 12. 2020, 18:42:26 »
IPC Socket je teda kvazy volba ? Ake ine metody este existuju? Pouziva sa to v praxy? Nie je lepsia volba pipes?

Proc by to mela byt kvazi volba? Mate radu nastroju, ktere se kazdy hodi na neco jineho a daji se pouzit ruznymi zpusoby.
Ja ve svem projekt pouzivam local socket a shared memory. Oboje funguje dobre.

Nevim co cekate, ze vam tady kdo rekne, kdyz vase otazka je tak strasne obecna. Krome tedy vyse zmineneho bych doporucil nakodit vice moznosti a otestovat.
Kod se moc lisit nebude, jde o nejaky housekeeping kod, logika psani do socketu bude v podstate stejna. Pokud tedy nezvolite sdilenou pamet.

Re:Python: komunikace mezi dvěma programy
« Odpověď #9 kdy: 12. 12. 2020, 19:45:53 »
Agentk ako moja otazka nebola mienena v zlom. Na nete je x sposobov ako to spravit ale mna zaujimalo co a ako sa najcastejsie pouziva. Kto ma s cim aku skusenost. Kazdopadne mrknem aj na local sockets. Shared memory asi nie.  Napriklad ja pisem v pythone ale kolega co bude riesit databazu tak pise v delphi (ano viem cele zle ale ma rok do dochodku a narovinu povedal ze kaka na to nic sa ucit nebude a nespravym s tym nic) takze sa snazim ziskat info ako sa takto veci najcastejsie riesia.

M_D

  • ****
  • 319
    • Zobrazit profil
    • E-mail
Re:Python: komunikace mezi dvěma programy
« Odpověď #10 kdy: 12. 12. 2020, 20:20:50 »
Uff, nějak se ti to z těch dvou programů v Pythonu komplikuje o další v Delphi? A poběží to vše na jednom kompu nebo několika?
Používá se kde co a pro různé věci, co je nejlepší bude dost záležet co vše a jak se má předávat, zpracovávat, ...
Unix socket nebo obecný síťový socket je rozumný základ. Ale možná zjistíš, že se bude hodit něco výše postaveného, co by řešilo některé věci, co budeš muset si u holého socketu řešit sám. Padla zmínka o 0MQ (ZeroMQ) - ano možnost, případně následnické projektyv podobě NanoMsg a NNG.
Možná můžeš skončit ještě výše o věcí kolem MQTT, Kafka, Redis, .... - vše jde použít a záleží co vše potřebuješ řešit. Často je to kombinace víc věcí, pokud je to rozsáhlejší záležitost. :-)

AgentK

  • ***
  • 129
  • Evolve or die!
    • Zobrazit profil
    • E-mail
Re:Python: komunikace mezi dvěma programy
« Odpověď #11 kdy: 12. 12. 2020, 21:14:34 »
Agentk ako moja otazka nebola mienena v zlom. Na nete je x sposobov ako to spravit ale mna zaujimalo co a ako sa najcastejsie pouziva. Kto ma s cim aku skusenost. Kazdopadne mrknem aj na local sockets. Shared memory asi nie.  Napriklad ja pisem v pythone ale kolega co bude riesit databazu tak pise v delphi (ano viem cele zle ale ma rok do dochodku a narovinu povedal ze kaka na to nic sa ucit nebude a nespravym s tym nic) takze sa snazim ziskat info ako sa takto veci najcastejsie riesia.

V pohode, ja jsem to zle nepochopil. Mozna jsem spis ja byl trochu prikry, sorry.

Fakt doporucuju vyzkouset, test nebude casove drahy. Local socket ma vyhodu v tom, ze jde pozdeji komponenty rozdelit a umistit na jiny stroje.

Jestli tam jsou nejaky high-level komponenty (a neni moc tlak na rychlost), tak se asi opravdu vyplati neco vic ... neco, co vyresi zaroven management tech zprav, jak pise M_D. A usetrite hromadu casu patlanim se s vasim protokolem. Ja z puvodniho prispevku trochu predpokladal, ze chcete neco low-level.

Tim spis, pokud jsou data uz strukturovana. Pokud ano, moznost je taky local inet socket a jet nejake REST API, nebo SOAP.

Tech moznosti je hodne a volba je spis na vas. My tu spis startujeme vasi inspiraci ;)
« Poslední změna: 12. 12. 2020, 21:16:09 od AgentK »

M_D

  • ****
  • 319
    • Zobrazit profil
    • E-mail
Re:Python: komunikace mezi dvěma programy
« Odpověď #12 kdy: 12. 12. 2020, 22:03:47 »
Jj, chce si to pár věcí zkuit, zamyslet se a pak zvolit. Poprvé to bude stejně špatně. :-(

Ale pokud chceš inspiraci reálného: Mám také malou apku, co bere data pomocí OPC-UA (větší počet tisícovek tagů, aktualizace cca sekundová, napsáno v C s pomocí open62541), žere data z OPC-UA zdrojů, vyrábí z toho JSON v SenML formátu a dává to do Redisu jako streamy. Paralelně vedle třeba nějaká další apka v Ruby (to už řeší jen nižší tisíce tagů spíše s minutovou aktualizací), ta žere data přes SOAP z OCIsoft  PI krámu a také dává jako SenML do Redisu a pak je tam několik dalších obdobných, kde některé ještě interně používají mezi sebou NanoMsg nebo čisté TCP spojení, pro rychlejší data. Z Redisu si čte streamy pár apek a chroupá dál -  třeba je tam i Webdis pro lokální web info náhled Redis dat, další něco sesčítá a výsledky jdou pro vzdálenou vizualizaci přes MQTT protokol (a končí to někde přes MQTT->OPC bránu zase v nějakém InTouch Wonderware), hlavně se z těch Redis streamů něco počítá a strká výsledky do Kafky, kde to pak z Kafky několik dalších apek strká do několika různých DB. :-)

Re:Python: komunikace mezi dvěma programy
« Odpověď #13 kdy: 13. 12. 2020, 05:10:01 »
Řeší se to podle nároků na objem dat, frekvenci komunikace, požadavků na dobu round-trip, požadavků na zabezpečení komunikace, integritu, charakter dat, požadavků na heterogenitu prostředí - více strojů, více OS, více jazyků atd.

Z hlediska výkonu porovnejte požadavky na rychlost odbavení (čas) vs. objem dat (velikost). Z hlediska heterogenity zvažte kdo všechno se odkud kam a jak bude připojovat.

Re:Python: komunikace mezi dvěma programy
« Odpověď #14 kdy: 13. 12. 2020, 12:20:52 »
No vsetky tie aplikacie budu spolu komunikovat len na jednom pc. Win 10. Nic ine. Je to hlavne preto ze kolega len Dephi a musim pomocov mojej app komunikovat s nim. Ziaden velky prenost dat ziadne specialitky cca 200 premennych medzi sebou s toho asi 50 stringov.