我想在使用过程对象的Python中使用工作者池。每个工作人员(一个进程)都会进行一些初始化(需要花费很少的时间),通过一系列工作(理想情况下使用map()
)并返回一些内容。除此之外,没有必要进行沟通。但是,我似乎无法弄清楚如何使用map()来使用我的工作人员的compute()
函数。python池与工人进程
from multiprocessing import Pool, Process
class Worker(Process):
def __init__(self):
print 'Worker started'
# do some initialization here
super(Worker, self).__init__()
def compute(self, data):
print 'Computing things!'
return data * data
if __name__ == '__main__':
# This works fine
worker = Worker()
print worker.compute(3)
# workers get initialized fine
pool = Pool(processes = 4,
initializer = Worker)
data = range(10)
# How to use my worker pool?
result = pool.map(compute, data)
是作业队列去替代方式,或者我可以使用map()
?
所有过程对象是有状态。您可能希望从标题中删除该单词。也。 'compute'是Worker的一种方法。在这些例子中,它通常是一个完全独立的功能。为什么不写计算函数来简单地包括初始化和处理? – 2012-01-27 19:48:48
够公平的,谢谢。初始化需要很长时间,所以我只想在每个工作进程中执行一次。 – Felix 2012-01-27 20:14:18
你必须要强调“通过一系列工作”的部分问题。由于这并不明显。 – 2012-01-27 20:19:45