AttributeError:'_ MainProcess'对象没有属性'_exiting'

时间:2010-11-11 15:07:46

标签: python multiprocessing python-2.5

我有一个

AttributeError: '_MainProcess' object has no attribute '_exiting'
来自Python应用程序的

。不幸的是,这段代码必须运行Python 2.5,因此processing模块现在称为multiprocessing。我正在做的是从主进程创建一个Process,其Queueput项目在队列中。查看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()

1 个答案:

答案 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()