2017-02-19 11 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() 

私もdo_something()機能のcurrent_thread().ident内部を持っていますが開始されたスレッドのアイデンティティはPythonスクリプトが実行されていることをメインスレッドと同じであるように思えます。私のアプローチは間違っていると思います。

+0

、私は信じて良い仕事します:

あなたがいない結果を実際の関数を渡す必要があります。この問題が修正されたとしても、Pythonスレッドは実際には同時に実行されないことに注意する必要があります。なぜなら、Pythonインタプリタは、2つ以上の異なる実行スレッドを同時に解釈できないためです(そしてGIL (グローバルインタープリタロック)を使用して、共有リソースの待機、I/O、または 'sleep()'呼び出しをブロックしてから別のスレッドを実行するまで、 (もしあれば) – martineau

答えて

3

これは間違いのために一般的で簡単です。

target=do_something()だけ目に見える誤差を引き起こさないスレッドにtarget関数としてメインスレッドに一度にあなたの機能を実行し、None(私はあなたの仮定関数の戻り値)を通過します。何もしません。

t = threading.Thread(target=do_something) 

が当面の問題については、ジャン=フランソワ・ファーブルが正しい@

+0

魅力のように働いてくれてありがとう!!!! –

+0

邪悪なトークンペアの '()'と '[]'ストロークのもう1つのストローク。 – Dilettant

関連する問題