我是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().
我想在课堂上使用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)
然后挂起.