2017-09-19 8 views
2

私は次のスクリプト(の内容を参照していない)持っている:私は同時に(例えば4スレッド)を実行したいすべてのスレッドが完了するまで待つ方法は?

import _thread 

def func1(arg1, arg2): 
    print("Write to CLI") 

def verify_result(): 
    func1() 


for _ in range (4): 
    _thread.start_new_thread(func1, (DUT1_CLI, '0')) 

verify_result() 

を私の場合は取ることができ、関数呼び出しが含まれて関数func1()実行する時間。最後のスレッドが作業を終了した後で、verify_result()を実行します。

現在のところ、すべてのスレッドがジョブを終了するのは、すべてのスレッドがジョブを終了する前にverify_result()が実行されるという結果です。

私もforループの下で(もちろん、私はスレッド輸入)次のコードを使用しようとしましたが、それは仕事をしなかった(引数を参照していない)

t = threading.Thread(target = Enable_WatchDog, args = (URL_List[x], 180, Terminal_List[x], '0')) 
t.start() 
t.join() 

答えて

1

最後のthreadingの例は近いですが、リスト内のスレッドを収集し、すべてを一度に開始してから、すべてを一度に完了するまで待つ必要があります。ここに簡略化した例があります:

import threading 
import time 

# Lock to serialize console output 
output = threading.Lock() 

def threadfunc(a,b): 
    for i in range(a,b): 
     time.sleep(.01) # sleep to make the "work" take longer 
     with output: 
      print(i) 

# Collect the threads 
threads = [] 
for i in range(10,100,10): 
    # Create 9 threads counting 10-19, 20-29, ... 90-99. 
    thread = threading.Thread(target=threadfunc,args=(i,i+10)) 
    threads.append(thread) 

# Start them all 
for thread in threads: 
    thread.start() 

# Wait for all to complete 
for thread in threads: 
    thread.join() 
1

はあなたを言いますスレッドのリストがあります。 あなたのループそれらの上(each_thread) -

for each_thread in thread_pool: 
    each_thread.start() 

ループ内の各スレッド内のrun関数の実行を開始します。

と同じように、あなたが後に別のループを書き、あなたはすべてのスレッドを起動しない参加

for each_thread in thread_pool: 
    each_thread.join() 

何を持っている、それは私が最後まで1番目のスレッドを+させる前に、実行を終了するスレッドを待つということです実行。

スレッドが同時に実行されると、join()は、各スレッドが結果を返す方法を同期させるだけです。

具体的には、join()ループと実行verify_result()機能があります。

+0

私はPythonの初心者です。特にスレッド化しました。スレッドプールが何を意味するのか少し説明してください。どのようにスレッドのリストを準備できますか? –

+0

@ MosheS。スレッドプールでは、スレッドのリテラルコレクションを意味します。 5回、好ましくは同時に実行する必要のあるジョブがあるとしたら、2つのスレッドを作成して(実行を開始せずに)、それぞれのスレッドがそれぞれジョブを占有し、3つのジョブが1つのスレッドが取得するまで待ちます自由に拾うことができるので、スレッドが自由であればスレッドプールをチェックし、そうでなければ待機する。スレッドのリストによって、私はスレッドオブジェクトのリストを意味しました。あなたはそれらを繰り返し、私があなたがやりたかったと思っていた仕事を開始します。私の答えでは、thread_poolはスレッドプールではなくそのようなリストを参照しています。 –

関連する問題