2017-01-10 57 views
2

所以我有一些等待X發生的代碼,然後創建一個線程並執行processEmail。Python:如何不等待線程完成繼續?

我正在尋找的是代碼繼續等待X的方法,即使processEmail發生在另一個線程中,但目前代碼只是等待線程在等待X再次發生之前完成。

if X happens: 
    thread = Thread(target = processEmail.main()) 
    thread.start() 

編輯:僅供參考我沒有什麼需要processEmail.main的輸出()進一步下跌的代碼,因此沒有必要對我來說,等待它的輸出。

答案Jean提供:刪除main()後面的()。

+0

它不會等待,除非你加入。你必須有一個'thread.join()'在某個地方?你需要向我們展示一些你的代碼。 –

+0

所以我在'thread.start()'之後有'thread.join()',但是我刪除了它,因爲看起來連接使它等待。但是,即使沒有'thread.join()',它仍然在等待' – dperrie

+1

您不會在單獨的線程中運行'processEmail.main()',因爲在線程開始之前調用它。 –

回答

6

問題是,您實際上是,在傳遞它作爲參數Thread時,調用

所以它執行,但在當前線程,這就是爲什麼它的工作,但它的阻止(並且由於它可能返回None,你從Thread對象中沒有錯誤,它只是塊)

刪除括號傳遞函數對象,而不是調用的結果!

thread = Thread(target = processEmail.main) 
thread.start() 

注意:像PyCharm這樣的一些IDE自動爲函數名添加括號。在這種情況下這是一個壞主意:)

+0

該死的,你完全正確!我錯過了我不知道的!非常感謝Jean! – dperrie

相關問題