[英]Python multiprocessing/threading with shared variables that only will be read
考慮下面的代碼。 我想一次運行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
檢查文檔,具體來說:
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__
可以導入__main__
方法。 這在編程指南中有所涉及,但值得在此指出。 這意味着某些示例(例如multiprocessing.Pool
示例)在交互式解釋器中不起作用
你必須始終牢記線程並不真正並行,如果那是你真正想要的。
我不解釋實際問題是什么......? 如果你只想要3個線程同時運行,為什么不只啟動3個線程?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.