我是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()
但是,我无法取回值,如何使用队列?
编辑:我想得到返回值,并想把Queues()
放在哪里。
Process.run
的返回值不在任何地方。您需要将它们发送回父进程,例如使用multiprocessing.Queue
(docs here)。谢谢大家。
现在我是这样做的:)
在这个例子中,我使用了多个queus,因为我不想在每个ohter之间通信,而只想与父进程通信。
子类化
multiprocessing.Process
:进程需要
Queue()
来接收结果。。。下面是一个如何对multiprocessing.Process
进行子类划分的示例。。。在我的机器上,这会导致。。。
使用
multiprocessing.Pool
:FWIW,我发现对
multiprocessing.Process
进行子类化的一个缺点是,如果您不需要生产者和消费者代码通过队列相互通信,就不能充分利用multiprocessing.Pool
的所有内置优点,Pool
为您提供了一个非常好的API。你可以做很多只是一些创造性的回报价值观。。。在下面的示例中,我使用
dict()
封装来自pool_job()
的输入和输出值。。。这将导致:
显然,在
pool_job()
中还有很多其他的改进,比如错误处理,但是这说明了一些要点。仅供参考,this answer提供了另一个如何使用multiprocessing.Pool
的示例。相关问题 更多 >
编程相关推荐