Ich entwickle eine Anwendung mit einem Team in .Net (C ++) und stelle eine COM-Schnittstelle zur Verfügung, um mit Python und anderen Sprachen zu interagieren.
Was wir herausgefunden haben, ist, dass das Schieben von Daten durch COM ziemlich langsam ist.
Ich habe mehrere Alternativen in Betracht gezogen:
Wie können Sie aus Ihrer Erfahrung Daten weitergeben?
Da wir innerhalb der Windows-Interprozesskommunikationsmechanismen geblieben sind, hatten wir positive Erfahrung mit Windows-Named Pipes .
Verwenden Sie Windows überlappende IO und das Modul win32pipe
von pywin32 .
Sie können viel über win32 und python im Python Programming On Win32 Buch erfahren.
Der sendende Teil schreibt einfach in r'\.\pipe\mypipe'
.
Ein Listener-Objekt ( ovpipe
) enthält eine Ereigniskennung, und das Warten auf eine Nachricht mit möglichen anderen Ereignissen beinhaltet den Aufruf von win32event.WaitForMultipleObjects
.
Hier ist ein Teil der überlappenden Python-Listener-Klasse:
%Vor%XML / JSON und entweder ein Web Service oder direkt über einen Socket. Es ist auch sprach- und plattformunabhängig. Wenn Sie also entscheiden, ob Sie den Python-Teil unter UNIX hosten möchten, oder wenn Sie plötzlich Java oder PHP oder so ziemlich jede andere Sprache verwenden möchten, können Sie das tun.
In der Regel bieten proprietäre Protokolle / Architekturen wie COM mehr Einschränkungen als Vorteile. Aus diesem Grund erschienen die offenen Spezifikationen an erster Stelle.
HTH
+1 auf die Named Pipes, aber ich möchte auch hinzufügen, dass aus Ihren Kommentaren scheint, dass Ihre Anwendung sehr gesprächig ist. Jedes Mal, wenn Sie einen Remote-Aufruf durchführen, unabhängig davon, wie schnell der zugrunde liegende Transport ist, haben Sie feste Kosten für das Marshalling der Daten und die Herstellung einer Verbindung. Wenn Sie die Addpoint-Methode (lat, long) in eine addpoints (point_array) -Methode ändern, können Sie eine Menge Overhead sparen. Die Idee ist ähnlich, warum wir Datenbankverbindungspools und http-Keep-Alive-Verbindungen haben. Je weniger Sie anrufen, desto besser. Ihre vorhandene COM-Lösung kann sogar gut genug sein, wenn Sie nur die Anzahl der Anrufe begrenzen können, die Sie darüber führen.
Es sollte nicht zu kompliziert sein, einen Test für jede Ihrer Alternativen zu erstellen und einen Benchmark zu erstellen. Beachten schlägt kontextsensitive empirische Daten ...:)
Oh, und wenn Sie das tun, bin ich sicher, dass viele Leute an den Ergebnissen interessiert wären.
Tags und Links python com winapi data-transfer