2010-01-14 2 views
1

J'essaie d'obtenir python-gasp travailler sur Windows, mais quand je fais import gasp; gasp.begin_graphics() je reçois le retraçage suivant:sous-classe multiprocessing.Process fonctionne sur Linux, mais pas Windows

File "C:\Python26\lib\site-packages\gasp\backend.py", line 142, in create_screen 

    screen.updater.start() 

    File "C:\Python26\lib\multiprocessing\process.py", line 104, in start 

    self._popen = Popen(self) 

    File "C:\Python26\lib\multiprocessing\forking.py", line 239, in __init__ 

    dump(process_obj, to_child, HIGHEST_PROTOCOL) 

    File "C:\Python26\lib\multiprocessing\forking.py", line 162, in dump 

    ForkingPickler(file, protocol).dump(obj) 

    File "C:\Python26\lib\pickle.py", line 224, in dump 

    self.save(obj) 

    File "C:\Python26\lib\pickle.py", line 331, in save 

    self.save_reduce(obj=obj, *rv) 

    File "C:\Python26\lib\pickle.py", line 419, in save_reduce 

    save(state) 

    File "C:\Python26\lib\pickle.py", line 286, in save 

    f(self, obj) # Call unbound method with explicit self 

    File "C:\Python26\lib\pickle.py", line 649, in save_dict 

    self._batch_setitems(obj.iteritems()) 

    File "C:\Python26\lib\pickle.py", line 681, in _batch_setitems 

    save(v) 

    File "C:\Python26\lib\pickle.py", line 286, in save 

    f(self, obj) # Call unbound method with explicit self 

    File "C:\Python26\lib\pickle.py", line 725, in save_inst 

    save(stuff) 

    File "C:\Python26\lib\pickle.py", line 286, in save 

    f(self, obj) # Call unbound method with explicit self 

    File "C:\Python26\lib\pickle.py", line 649, in save_dict 

    self._batch_setitems(obj.iteritems()) 

    File "C:\Python26\lib\pickle.py", line 681, in _batch_setitems 

    save(v) 

    File "C:\Python26\lib\pickle.py", line 331, in save 

    self.save_reduce(obj=obj, *rv) 

    File "C:\Python26\lib\pickle.py", line 396, in save_reduce 

    save(cls) 

    File "C:\Python26\lib\pickle.py", line 286, in save 

    f(self, obj) # Call unbound method with explicit self 

    File "C:\Python26\lib\pickle.py", line 748, in save_global 

    (obj, module, name)) 

PicklingError: Can't pickle <class 'multiprocessing.process._MainProcess'>: it's not found as multiprocessing.process._MainProcess 

Toute idée pourquoi je reçois ce erreur sur Windows XP mais pas sur Ubuntu Linux 9.04?

Il ressemble à screen.updater est une instance de Updater(multiprocessing.Process) (def), si cela aide. Le fichier en question est à http://bazaar.launchpad.net/~gasp-dev/gasp-core/main/annotate/head%3A/gasp/backend.py

Répondre

2

Votre classe Updater a un membre screen, qui a lui-même un membre process qui reçoit la valeur de multiprocessing.current_process().

Lorsque vous appelez le updater.start(), il tente de décaper le programme de mise à jour. Cela se produit uniquement sur Windows car Linux utilise fork() au lieu de décapage. Toutefois, l'objet de processus en cours ne peut pas être décapé et l'exception est augmentée.

Pour résoudre ce problème, vous pouvez supprimer le membre process.

Questions connexes