我想在使用過程對象的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