2017-01-10 13 views
2

私は、Xが起こるのを待ってから、スレッドを作成してprocessEmailを実行するコードをいくつか持っています。Python:スレッドの実行が完了するのを待つことはできません。

私が探しているのは、processEmailが別のスレッドで起きていても、コードが待機中のXを処理する方法ですが、現在コードはスレッドが終了してからXが再び起きるのを待っています。

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

EDIT:FYI私はprocessEmail.main(の出力を必要は何もありません)、さらにコードダウンので、私は、その出力のために待機する必要はありません。

ANSWER提供:Jean:()の後に()を削除します。

+0

あなたが 'join'を待たずに待つことはありません。 'thread.join()'がどこかでなければなりませんか?もう少しコードを表示する必要があります。 –

+0

だから 'thread.join()'を 'thread.start()'の後に置いていましたが、結合が待っているように見えるので、私はそれを削除しました。しかし、 'thread.join()'がなくてもまだ待ち状態です。 – dperrie

+1

'processEmail.main()'は別のスレッドで実行しません。 –

答えて

6

実際には、をという引数として渡したときに、メソッドを呼び出すのが問題です。

だから、それは実行されますが、それは働いている理由は、現在のスレッドでは、それはだが、それがブロックしています(そしてそれはおそらくNoneを返すために、あなたはThreadオブジェクト、それだけのブロックからエラーを取得していない)

渡すために括弧を削除します関数オブジェクトであり、呼び出しの結果ではありません。

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

注:PyCharmのような一部のIDEでは、関数名に括弧が自動的に追加されます。その場合、それは悪い考えです:)

+0

まあまあ、あなたは完全に正しいです!どのように私はそれを逃した私は知らない!本当にありがとうJean! – dperrie

関連する問題