我有一个
AttributeError: '_MainProcess' object has no attribute '_exiting'
来自Python应用程序的。不幸的是,这段代码必须运行Python 2.5,因此processing
模块现在称为multiprocessing
。我正在做的是从主进程创建一个Process
,其Queue
和put
项目在队列中。查看processing.queue
代码,我可以看到启动了一个支线程序。然后,此馈送线程将检查currentProcess()._exiting
,但currentProcess()
将评估为_MainProcess
,其中没有所述属性,如processing.process
模块中所示。怎么解决这个?这是processing
中的错误吗?如果是,我可以使用currentProcess()._exiting = False
最小例子:
#!/usr/bin/python
import processing
import processing.queue
class Worker(processing.Process):
def __init__(self):
processing.Process.__init__(self)
self.queue = processing.queue.Queue()
def run(self):
element = self.queue.get()
print element
if __name__ == '__main__':
w = Worker()
w.start()
# To trigger the problem, any non-pickleable object is to be passed here.
w.queue.put(lambda x: 1)
w.join()
答案 0 :(得分:1)
我不确定你为什么要在这种情况下挑选一个函数,如果你真的想这样做,请看看这个答案:Is there an easy way to pickle a python function (or otherwise serialize its code)?
否则,这适用于python 2.6(我知道你正在寻找2.5但我没有2.5)。我已经用常规函数替换了lambda函数,并将其提供给处理构造函数:
from multiprocessing import Process, Queue
def simple():
return 1
class Worker(Process):
def __init__(self, args):
Process.__init__(self, args=args)
self.queue = Queue()
def run(self):
element = self.queue.get()
print element
if __name__ == '__main__':
w = Worker(args=[simple])
w.start()
w.join()