2017-02-19 82 views
2

所以我的目標是讓do_something()函數啓動自己的線程,以便do_something()可以並行運行,而不必等待前一個線程完成。問題是它看起來好像不是多線程(意味着一個線程在另一個線程開始之前完成)。同時運行多個線程

for i in range(len(array_of_letters)): 

    if i == "a": 
     t = threading.Thread(target=do_something()) 

     print "new thread started : %s"%(str(threading.current_thread().ident))  
     t.start() 

我也有一個current_thread().identdo_something()函數內,但它似乎是一種開始是一樣的Python腳本從運行主線程的線程的身份。我認爲我的方法是不正確的。

+0

@讓·弗朗索瓦·法布爾是正確的,我相信,對眼前的問題。即使修復了這些,你也應該知道,在Python中,線程並不真正運行,因爲大部分Python解釋器不能同時解釋兩個或更多不同的執行線程(並且有一些稱爲GIL (全局解釋器鎖)來阻止它,相反,它會運行一個線程,直到它阻塞等待共享資源,I/O或調用sleep(),然後才切換到運行另一個線程(如果有的話) – martineau

回答

3

這是一個常見而容易犯錯的地方。

target=do_something()只是在主線程中立即執行你的函數,並且將None(我想你的函數的返回值)作爲target函數傳遞給線程,不會觸發任何可見的錯誤;但是也沒有做到。

你必須通過實際功能沒有結果:

t = threading.Thread(target=do_something) 

將更好地工作

+0

工作就像一個魅力,謝謝!!!! –

+0

是的邪惡的標記對之一'()'和'[]'再次中風 - 很好的解釋國際海事組織。 – Dilettant