2016-03-19 109 views
1

我想用多線程,爲了保持它的簡單,首先,我運行下面的代碼:蟒蛇池不起作用

import multiprocessing as mp 

pool = mp.Pool(4) 

def square(x): 

    return x**2 

results=pool.map(square,range(1,20)) 

按照我的理解,結果應該是一個列表包含從1到20的正方形。 但是,代碼似乎並未終止(在沒有閃爍的情況下完成相同的操作時,此操作持續了幾分鐘,之後我手動停止)。

附加信息:任務管理器告訴我,附加的python進程已經啓動並正在運行,但正在使用我的cpu的零%;還有其他不相關的進程,比如在他們的CPU使用情況下,火狐飛漲,而程序正在運行。 我使用的是Windows 8和一個i5-4300U cpu(共用2而不是4也沒有幫助)

我在做什麼錯? Pool類有沒有很好的資源,可以幫助我理解我的代碼出了什麼問題?

+0

嘗試在您實例池顛倒順序,並定義方 – user234461

+0

關於Python 3.4的游泳池拋出/ Linux的我越來越AttributeErrors過程 – user234461

+0

閱讀多文檔中的特定Windows的提示,要特別注意需要'if __name__ =='__main __''。 –

回答

0

您的代碼會導致每個進程遇到屬性錯誤,因爲它找不到square屬性,因爲它在實例化池時未定義。這個過程因此在此後懸掛。在池之前定義平方可以解決問題。

參見:

yet another confusion with multiprocessing error, 'module' object has no attribute 'f'

+0

這並沒有對自己,然而在你提供的鏈接評論工作,讓我用進口多爲MP 高清廣場(X): \t返回X ** 2 如果__name__ ==「__main__」: 池= mp.Pool(4) results = pool.map(square,range(1,20))我不確定如何格式化,所以有兩個後續問題:如何在這裏格式化註釋(輸入讓我提交),如果聲明使代碼有效,這是多麼的不祥? – axioman

1

代碼池初始化應該是內部​​作爲multiprocessing每次產生新的進程導入模塊。

import multiprocessing as mp 

def square(x): 
    return x**2 

if __name__ == '__main__': 
    pool = mp.Pool(4) 
    results=pool.map(square,range(1,20))