Python 多处理。进程子类在Linux上工作,但在Windows上不工作
我正试图在Windows上工作,但当我导入时,我倒吸了一口气;gasp.begin_graphics()我得到了以下回溯:Python 多处理。进程子类在Linux上工作,但在Windows上不工作,python,windows,multiprocessing,pickle,gasp,Python,Windows,Multiprocessing,Pickle,Gasp,我正试图在Windows上工作,但当我导入时,我倒吸了一口气;gasp.begin_graphics()我得到了以下回溯: 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
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
文件“C:\Python26\lib\site packages\gasp\backend.py”,第142行,在创建屏幕中
screen.updater.start()
文件“C:\Python26\lib\multiprocessing\process.py”,第104行,在开始处
self.\u popen=popen(self)
文件“C:\Python26\lib\multiprocessing\forking.py”,第239行,在\uuu init中__
转储(进程对象、到子进程、最高\u协议)
文件“C:\Python26\lib\multiprocessing\forking.py”,第162行,在转储中
ForkingPickler(文件、协议).dump(obj)
文件“C:\Python26\lib\pickle.py”,第224行,位于转储文件中
自我保存(obj)
文件“C:\Python26\lib\pickle.py”,第331行,保存
自我保存(obj=obj,*rv)
文件“C:\Python26\lib\pickle.py”,第419行,在save\u reduce中
保存(状态)
文件“C:\Python26\lib\pickle.py”,第286行,保存
f(self,obj)#用显式self调用未绑定方法
保存目录中第649行的文件“C:\Python26\lib\pickle.py”
self.\u batch\u setitems(obj.iteritems())
文件“C:\Python26\lib\pickle.py”,第681行,在批处理设置项中
保存(v)
文件“C:\Python26\lib\pickle.py”,第286行,保存
f(self,obj)#用显式self调用未绑定方法
文件“C:\Python26\lib\pickle.py”,第725行,在save\u inst中
保存(东西)
文件“C:\Python26\lib\pickle.py”,第286行,保存
f(self,obj)#用显式self调用未绑定方法
保存目录中第649行的文件“C:\Python26\lib\pickle.py”
self.\u batch\u setitems(obj.iteritems())
文件“C:\Python26\lib\pickle.py”,第681行,在批处理设置项中
保存(v)
文件“C:\Python26\lib\pickle.py”,第331行,保存
自我保存(obj=obj,*rv)
文件“C:\Python26\lib\pickle.py”,第396行,在save\u reduce中
保存(cls)
文件“C:\Python26\lib\pickle.py”,第286行,保存
f(self,obj)#用显式self调用未绑定方法
文件“C:\Python26\lib\pickle.py”,第748行,在save\u global中
(对象、模块、名称))
PicklingError:无法pickle:找不到多进程。进程。\u MainProcess
你知道为什么我在WindowsXP而不是Ubuntu Linux 9.04上出现这个错误吗
它看起来像是
screen.updater
是updater(multiprocessing.Process)
()的一个实例,如果这有帮助的话。有问题的文件位于您的更新程序
类有一个成员屏幕
,它本身有一个成员进程
,该进程接收多处理.current\u process()的值
调用updater.start()
时,它会尝试对更新程序进行pickle处理。这只发生在Windows上,因为Linux使用fork()
而不是酸洗。但是,无法对当前进程对象进行pickle并引发异常
要解决此问题,可以删除进程
成员