Seite 1 von 2
Verfasst: Donnerstag 28. Januar 2010, 20:16
von ms4py
Ich würde dir dringend zu irgendeiner Form von IPC (z.B. xmlrpc ist ganz nett und relativ simpel, umfangreichere und ausgereiftere Möglichkeit wäre u.a. noch Pyro) raten und die Prozesse getrennt verwalten und starten.
Das, was du da geplant hast, lässt sich (wenn überhaupt) dann nur sehr umständlich lösen und ist IMHO auch kein schöner Ansatz.
Verfasst: Donnerstag 28. Januar 2010, 22:44
von maxi_king_333
Hi,
Du meinst doch:
http://docs.python.org/library/xmlrpclib.html
So wie ich das sehe, läuft da die Kommunikation übers Netzwerk und das finde ich eigentlich nicht gut.
Ich werde es mir trotzdem mal ausprobieren und mich wieder melden.
Vielen Dank und Viele Grüße
Maxi
Verfasst: Freitag 29. Januar 2010, 11:43
von Andyh
Hallo
Ich habe seit neuestem den dbus für mich entdeckt, ist auch ganz simpel.
http://dbus.freedesktop.org/doc/dbus-py ... orial.html
Gruß
Andyh
Verfasst: Samstag 30. Januar 2010, 12:11
von maxi_king_333
Hi,
das Ding scheint ganz gut zu sein, ist aber nicht Teil er Standard Bibliothek und unter Windows bekomme ich nur schwer zum laufen (so wie ich das sehe).
Ich benutzte zwar kein Windows aber ich habe extra Python als Sprache gewählt, weil sie unter verschiedenen Plattformen läuft und ich so mein Programm auch den Windows Usern zugänglich machen kann.
xmlrpc läuft übers Netzwerk und deshalb möchte ich es eigentlich auch nicht verwenden und Pyro ist wieder nicht Standard.
Habe jetzt aber eine Idee, wenn es wirklich daran liegt, dass gtk.main() in einem Anderen Prozess läuft, dann starte ich einfach mein ganzes Interface als Prozess und kann dort dann direkt gtk.main() als Hauptschleife laufen lassen.
Viele Grüße
Maxi
Verfasst: Samstag 30. Januar 2010, 13:43
von ms4py
Und was ist das Problem mit dem Netzwerk?
Ansonsten könntest du es auch noch mit Pipes (über subprocess) machen, aber das wäre wesentlich komplexer.
Verfasst: Samstag 30. Januar 2010, 14:38
von maxi_king_333
Hi,
Und was ist das Problem mit dem Netzwerk?
Es werden Ports blockiert...
Viele Grüße
Maxi
Verfasst: Samstag 30. Januar 2010, 14:52
von Leonidas
Auch lokale Ports? Das scheint mir höchst unüblich.
Verfasst: Samstag 30. Januar 2010, 14:57
von maxi_king_333
Hi,
was meinst Du mit Lokalen Ports?
Naja, jedenfalls schon im ersten Beispiel:
Code: Alles auswählen
server = SimpleXMLRPCServer(("localhost", 8000))
print "Listening on port 8000..."
Das ist doch eindeutig, stellt Euch mal vor, das machen alle und dann möchte man 2 Programme ausführen und die benutzten beide den gleichen Port, viel Spaß...
Deshalb, da biege ich lieber irgendetwas unsauberes zusammen bevor ich eine Kommunikation übers Netzt aufbaue.
Aber wie schon gesagt, werde das mit dem gtk_main() als Hauptschleife eines Prozesses mal ausprobieren.
Viele Grüße
Maxi
Verfasst: Samstag 30. Januar 2010, 15:10
von Leonidas
Du kannst ja einen zufälligen Port wählen...
Verfasst: Samstag 30. Januar 2010, 15:14
von maxi_king_333
Hi,
ja schon, aber das ändert nichts, vielleicht erwische ich einen Port, der trotzdem schon benutzt wird.
Und selbst wenn es nicht so wäre, dann braucht mein GUI ja auch noch eine Überwachungsfunktion, die dann wieder in einem Prozess oder Thread laufen muss und dann wird das GUI ja nicht mehr aus dem Hauptthread bzw. Prozess in dem gtk_main() läuft verändert und es geht wieder nicht.
Viele Grüße
Maxi
Verfasst: Samstag 30. Januar 2010, 15:34
von jbs
Code: Alles auswählen
In [19]: from socket import socket
In [20]: s = socket()
In [21]: s.bind(("localhost", 0))
In [22]: s.getsockname()
Out[22]: ('127.0.0.1', 63786)
Ein freier Port, nur für dich.
Verfasst: Samstag 30. Januar 2010, 15:38
von Trundle
Und PyGtk bietet auch Funktionen an, dass man Sockets in der Eventschleife von PyGtk überwachen kann. Und Netzwerkbibliotheken wie etwa Twisted bieten auch Möglichkeiten, dass sie das benutzen.
Verfasst: Samstag 30. Januar 2010, 15:39
von maxi_king_333
Danke - gut zu wissen...
//Edit:
Und PyGtk bietet auch Funktionen an, dass man Sockets in der Eventschleife von PyGtk überwachen kann. Und Netzwerkbibliotheken wie etwa Twisted kommen bieten auch Möglichkeiten, dass sie das benutzen.
Dann brauche ich aber wieder eine externe Bibliothek.
Muss jetzt erstmal schauen, was ich mache (so viele Möglichkeiten)...
Verfasst: Samstag 30. Januar 2010, 16:01
von Trundle
Es ist ja nicht so, dass man diese externen Bibliotheken einfach nur willkürlich benutzt und empfiehlt, sondern weil sie das Leben erleichtern sollen. Sicher, man braucht sie nicht, man kann das auch alles selber machen. Nur wozu? Letztlich schreibt man doch nur bestehendes neu und das oftmals in schlechter. Lowlevel-Netzwerkcode macht wirklich nicht sehr viel Spaß, vor allem, wenn man es richtig machen will. Denn gerade, wenn man dann noch mit Unterprozesen arbeitet, muss man eben mit solchen spaßigen Dingen wie unterbrochenen Syscall rechnen ("EINTR") und darum mag man sich einfach nicht selber kümmern.
Verfasst: Samstag 30. Januar 2010, 16:13
von maxi_king_333
Hi,
Nur wozu?
Weil man ein Gerät benutzt, bei dem eben nur Python, ohne Bibliotheken drauf ist.
Das Programm soll ja schließlich auch auf meinem iPod laufen, das jetzige Programm ohne GUI tut es ja auch.
Auf dem iPod soll es später auch mit GUI laufen und da habe ich so eine Bibliothek nicht. Ich habe zwar auch kein PyGTK aber dafür eine iPod interne Bibliothek die ich ansteuern kann.
Viele Grüße
Maxi
Lösung gefunden
Verfasst: Sonntag 31. Januar 2010, 12:18
von maxi_king_333
Hi,
habe eine für mich akzeptable Lösung gefunden.
An diesem Code habe ich mich orientiert:
http://haltcondition.net/?p=2319
Viele Grüße
Maxi[/code]