考虑以下代码。我想一次运行3个实验。实验是独立的,他们唯一共享的是他们只阅读的Model对象。
由于在解决这个问题上似乎没有什么困难,我怎样才能在Python中做到最好?我想使用一个池左右,以确保一次只运行三个实验。我应该使用多处理吗?如果是的话,最短最简洁的是什么?
#!/usr/bin/env python2.6
import time
class Model:
name = ""
def __init__(self,name):
self.name = name
class Experiment:
id = 0
model = None
done = False
def __init__(self,id,model):
self.id = id
self.model = model
def run(self):
for _ in range(0,60):
print "Hey %s from experiment %d" % (self.model.name, id)
time.sleep(1)
self.done = True
if __name__ == "__main__":
experiments = []
model = Model("statictistical model")
for i in range(0,5):
experiments.append(Experiment(i, model))
#How to run 3 experiments at the same time
答案 0 :(得分:3)
检查文档,特别是:
http://docs.python.org/library/multiprocessing.html#module-multiprocessing.pool
那里有很多例子可以帮助你。例如,我可以提出:
#!/usr/bin/env python2.6
import time
import multiprocessing
class Model:
name = ""
def __init__(self,name):
self.name = name
def run_experiment(id, model):
print "Experiment %d is starting" % id
for _ in range(0,60):
print "Hey %s from experiment %d" % (model.name, id)
time.sleep(1)
print "Experiment %d is done" % id
return "Result for %d" % id
if __name__ == "__main__":
model = Model("statictistical model")
experiments = ((i, model) for i in range(0, 5))
pool = multiprocessing.Pool(3)
results = [pool.apply_async(run_experiment, experiment) for experiment in experiments]
for result in results:
r = result.get()
# do something with r
# or nothing, i suppose...
还要注意文档对使用multiprocessing
模块的说法:
此包中的功能 要求
__main__
方法 可由儿童进口。这是 编程指南中包含 但是值得指出这里。 这意味着一些例子,如multiprocessing.Pool
个例子 不会在互动中工作 解释
答案 1 :(得分:1)
你必须始终牢记线程并不真正并行,如果这是你真正想要的。
我不知道实际问题是什么......?如果你只想要3个线程同时运行,为什么不只启动3个线程呢?