Aloha, ich schreibe gerade ein Programm, das bestenfalls platformunabhängig sein soll, im Moment aber nicht ist, und ich kann das Problem nicht so richtig eingrenzen. Also: im Spiel sind die xmlrpclib und multiprocessing (+ Queue). Ein Prozess soll via xmlrpclib pollen und die Daten, soweit vorhanden in eine Queue packen, dieser wird mit multiprocessing.Process gestartet ~ # run it pr = Process(target=c.main_loop, args =(q,)) pr.start() Ein anderer Prozess (genauer gesagt, das main) liest sich die q (Queue) und reagiert. Der Code läuft unter Linux (irgendein aktuelles Ubuntu 12.x) ohne weitere Probleme. Unter Windows (win7, beides python 2.7.3) bricht der obige Process( ab mit einer Fehlermeldung, das ein xmlrpclib Object nicht ge-pickle-t werden kann, da xmlrpclib Objekte kein ___getinitargs__ hat (was auch stimmt). Warum läuft das unter Linux? Könnte man einfach die fehlenden __calls in xmlrpclib nachrüsten? Oder läuft da ganz was falsch? Auf bald, LOBI
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Andreas Lobinger wrote:
Unter Windows (win7, beides python 2.7.3) bricht der obige Process( ab mit einer Fehlermeldung, das ein xmlrpclib Object nicht ge-pickle-t werden kann, da xmlrpclib Objekte kein ___getinitargs__ hat (was auch stimmt).
Warum sollte man ein xmlrpclib Module pickeln wollen? - -aj -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (Darwin) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQGUBAEBAgAGBQJRm8PqAAoJEADcfz7u4AZjyD4LwKg4tNknD6u+SzGBQWHoHHbP f2+B4LPY8sx6/Wg73LrI1HxUHl9vcSKtZtwnR+R+SCyZvgjq74MaD8fQ13iC6uL/ yuxejrAaptiIatThWdYwc9WQHkc+pxGibNGqVzicG4uM2W/nGsf1CcwfnmifNS5y rls6/goi5UTeEs+rhgqyP2d9/KztOItAqO5Udi77jB0Rp1LhXUp27xr2N1+1R0io 2L447fhd+0NnsQBbeT5x55S0zbZsCfdoJyBPolAUbtmntSLNm/cSI8wE0hAJiNYj 32veRQ4QOWtKhUEo/2r6DfzFxcl1D+x4SN16D/4WirEzjNudzuuedtOih5g75YHp DjHViTP3jVc7lLKCjqxHuw3I9/aRpKA5ECA9bVKY4I+41SGrbsR/PewARFZffAXG 9D33EQm8Rbbz+7tAflkQNATHabSzqCiI6gBH/g/A79R75AfdMn/brfSQD8eOTm4D Htv6t8u6QDh04ceBlwD4Fgr+6ZxwkWc= =RM4P -----END PGP SIGNATURE-----
Andreas Lobinger wrote:
Aloha,
ich schreibe gerade ein Programm, das bestenfalls platformunabhängig sein soll, im Moment aber nicht ist, und ich kann das Problem nicht so richtig eingrenzen.
Also: im Spiel sind die xmlrpclib und multiprocessing (+ Queue). Ein Prozess soll via xmlrpclib pollen und die Daten, soweit vorhanden in eine Queue packen, dieser wird mit multiprocessing.Process gestartet ~ # run it pr = Process(target=c.main_loop, args =(q,)) pr.start()
Ein anderer Prozess (genauer gesagt, das main) liest sich die q (Queue) und reagiert.
Der Code läuft unter Linux (irgendein aktuelles Ubuntu 12.x) ohne weitere Probleme.
Unter Windows (win7, beides python 2.7.3) bricht der obige Process( ab mit einer Fehlermeldung, das ein xmlrpclib Object nicht ge-pickle-t werden kann, da xmlrpclib Objekte kein ___getinitargs__ hat (was auch stimmt).
Warum läuft das unter Linux? Könnte man einfach die fehlenden __calls in xmlrpclib nachrüsten? Oder läuft da ganz was falsch?
Das Modul serialisierbar zu machen ist mit Sicherheit der falsche Weg. Lies mal http://docs.python.org/2/library/multiprocessing.html#windows Falls es dir nicht gelingt, dein Programm so umzuschreiben, dass kein Argument von Process(...) die xmlrpclib (als Attribut) referenziert, zeig uns mehr von deinem Code...
participants (3)
-
Andreas Jung
-
Andreas Lobinger
-
Peter Otten