Verbind twee daemons in python

Wat is de beste manier om twee daemons in Python te verbinden?

Ik heb daemon A en B. Ik wil graag gegevens ontvangen die zijn gegenereerd door B in A's module (misschien bidirectioneel). Beide daemons ondersteunen plug-ins, dus ik wil de communicatie in plug-ins sluiten. Wat is de beste en platformoverschrijdende manier om dat te doen?

Ik ken weinig mechanismen van low-level oplossingen - gedeeld geheugen (C/C ++), linux-pipe, sockets (TCP/UDP), enz. En enkele high-level - wachtrijen (JMS, Rabbit), RPC.

Beide daemons moeten op dezelfde host worden uitgevoerd, maar natuurlijk is een betere benadering het abstract van het verbindingstype.

Wat zijn typische oplossingen/bibliotheken in python? Ik ben op zoek naar een elegante en lichtgewicht oplossing. Ik heb geen externe server nodig, slechts twee processen die met elkaar praten.

Wat moet ik in Python gebruiken om dat te doen?

5
Een berichtenwachtrij is hoogstwaarschijnlijk de meest elegante oplossing.
toegevoegd de auteur ThiefMaster, de bron
kan subproccess.Popen() werken wanneer het wordt gebruikt met communiceren() voor uw doeleinden? iets in de lijn van het spawnen van beide programma's met args en dergelijke uit een algemeen programma dat de subprocessen bevat en met elkaar communiceert via het algehele programma?
toegevoegd de auteur IT Ninja, de bron
Ik zou zeggen dbus, maar er is nu een windows-versie van dbus.
toegevoegd de auteur dav1d, de bron
Hmm als berichtenwachtrij begrijp ik KonijnMQ/JMS, enz. Ik wil externe, derde daemon/server vermijden om hele communicatie aan te kunnen. Bovendien zal communicatie heel intens zijn, dus misschien zelfs als wachtrij de meest elegante manier is, denk ik dat iets eenvoudiger zou kunnen zijn.
toegevoegd de auteur Simon, de bron
Helaas is Windows ook mijn doelwit.
toegevoegd de auteur Simon, de bron
Niet echt. Ik wil geen veranderingen in die daemons doen, zelfs ik wil geen manier veranderen om ze te starten/stoppen. Use case is triviaal. I (beheerder, cron-taak, wat dan ook, iets wat al is geconfigureerd), voer er gewoon een uit met mijn plug-in ingeschakeld, de tweede ook. Als de plug-in in staat is om verbinding te maken met de tweede, worden er gegevens verzonden, als dit niet het geval is, wordt er een waarschuwing in het logboek gegenereerd of iets dergelijks. Op dit moment denk ik dat elke RPC/Socket-oplossing de beste zou zijn. Wachtrij is het meest elegant, maar niet lichtgewicht. Eventuele aanbevelingen voor RPC/Socket (gebruikt op localhost) bibliotheek in python?
toegevoegd de auteur Simon, de bron

2 antwoord

2
toegevoegd

Ik weet niet zeker hoe zwaar uw verkeer is, maar ik zou het asyncore -pakket aanraden. Het is vrij eenvoudig te gebruiken en het is gebaseerd op sockets.

Ik heb lang geleden een opdrachtpatroon gemaakt. Ik kan de code uitzoeken als je geïnteresseerd bent.

0
toegevoegd