我有這樣差()
def plotFrame(n):
a = data[n, :]
do_something_with(a)
data = loadtxt(filename)
ids = data[:,0] # some numbers from the first column of data
map(plotFrame, ids)
,對我工作的罰款代碼。現在我想嘗試更換map()
與pool.map()
如下:
pools = multiprocessing.Pool(processes=1)
pools.map(plotFrame, ids)
但是,這是行不通的,他說:
NameError: global name 'data' is not defined
的問題是:這是怎麼回事?爲什麼map()
不會抱怨data
變量沒有傳遞給函數,但pool.map()
呢?
編輯: 我正在使用Linux。
編輯2: 基於@Bill的第二個建議,我現在有下面的代碼:
def plotFrame_v2(line):
plot_with(line)
if __name__ == "__main__":
ff = np.loadtxt(filename)
m = int(max(ff[:,-1])) # max id
l = ff.shape[0]
nfig = 0
pool = Pool(processes=1)
for i in range(0, l/m, 50):
data = ff[i*m:(i+1)*m, :] # data of one frame contains several ids
pool.map(plotFrame_v2, data)
nfig += 1
plt.savefig("figs_bot/%.3d.png"%nfig)
plt.clf()
按預期工作而已。但是,現在我又有一個意外問題:產生的數字是空白的,而上面的代碼map()
產生的數字的內容爲data
。
你在Windows上運行這個可能嗎?當使用'multiprocessing'時,最好不要依賴全局變量;特別是在Windows上,衍生子進程可能看不到全局變化。 –
這個問題可能會有所幫助,不知道多少關於此,但它可以幫助:http://stackoverflow.com/questions/5442910/python-multiprocessing-pool-map-for-multiple-arguments – ederollora