<p>要重用流程,您应该使用池。像这样的东西应该行得通,不过我还没有测试过。在</p>
<pre><code>SENTINEL = "SENTINEL"
class Worker(object):
def __init__(self, result_queue, MCMCinstance):
assert isinstance(MCMCinstance, MCMC)
self.result_queue = result_queue
self.mcmc = MCMCinstance
self.interface = C_interface(self.mcmc)
self.burn_in = False
def run(self):
if self.burn_in: interface.burn_in()
self.interface.sample(self.mcmc.options.runs)
self.interface.update(self.mcmc)
#Signal exit by putting SENTINEL in the queue
if True:
self.result_queue.put(SENTINEL)
else:
self.result_queue.put(self.mcmc)
def run(result_queue):
while True:
instance = result_queue.get(True)
if instance == SENTINEL:
break
worker = Worker(result_queue, instance)
worker.run()
if __name__ == "__main__":
result_queue = multiprocessing.Queue()
pool = multiprocessing.pool.Pool(3, run, (result_queue,)) # Use a pool with 5 process
mcmc1 = MCMC(options, donors, clusters)
mcmc2 = MCMC(options, donors, clusters)
mcmc3 = MCMC(options, donors, clusters)
mcmc4 = MCMC(options, donors, clusters)
result_queue.put(mcmc1)
result_queue.put(mcmc2)
result_queue.put(mcmc3)
result_queue.put(mcmc4)
pool.close()
pool.join()
</code></pre>