相关疑难解决方法(0)

python子类化multiprocessing.Process

我是python面向对象的新手,我将现有的应用程序重写为面向对象的版本,因为现在开发人员正在增加,我的代码变得无法维护.

通常我使用多处理队列,但我从这个例子http://www.doughellmann.com/PyMOTW/multiprocessing/basics.html发现我可以继承,multiprocessing.Process所以我认为这是一个好主意,我写了一个类来测试这样:

码:

from multiprocessing import Process
class Processor(Process):
    def return_name(self):
        return "Process %s" % self.name
    def run(self):
        return self.return_name()

processes = []


if __name__ == "__main__":

        for i in range(0,5):
                p=Processor()
                processes.append(p)
                p.start()
        for p in processes:
                p.join()
Run Code Online (Sandbox Code Playgroud)

但是我无法取回值,我怎样才能以这种方式使用队列?

编辑:我想获得返回值并思考放在哪里Queues().

python oop parallel-processing concurrency multiprocessing

25
推荐指数
1
解决办法
3万
查看次数

Python中的类中的池

我想在课堂上使用Pool,但似乎有问题.我的代码很长,我创建了一个小型演示变体来说明问题.如果你能给我一个下面代码的变体,那就太棒了.

from multiprocessing import Pool

class SeriesInstance(object):
    def __init__(self):
        self.numbers = [1,2,3]
    def F(self, x):
        return x * x
    def run(self):
        p = Pool()
        print p.map(self.F, self.numbers)


ins = SeriesInstance()
ins.run()
Run Code Online (Sandbox Code Playgroud)

输出:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "/usr/lib64/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/lib64/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/usr/lib64/python2.7/multiprocessing/pool.py", line 319, in _handle_tasks
    put(task)
PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed
Run Code Online (Sandbox Code Playgroud)

然后挂起.

python pool class multiprocessing

9
推荐指数
1
解决办法
3419
查看次数