1

これらの各スレッドは、データ オブジェクトの異なるリストからシリアル番号を検索しています。見つかった場合は、オブジェクトをキューに入れます。シリアル番号は一意です。

q = Queue.Queue(10)
thread_list = []
for i in range(0, 10):
   t = Thread(serial)
   thread_list.append(t)
   t.start()

すべてのスレッドが終了するのを待つのではなく:

for t in thread_list:
    t.join()

探しているシリアル番号が見つかったときにすべてのスレッドを停止する方法はありますか? また、シリアル番号が見つからず、キューが空のままになる可能性を考慮しますか?

4

1 に答える 1

1

簡単なアプローチは、キューを使用することです...スレッドランナークラスで(これは私がシリアルであると想定しているものです)

class FindSerial(Thread):
    def __init__(self, serial, queue):
         this.serial = serial
         this.queue  = queue
         super(FindSerial, self).__init__()

    def run(self):
        .... 
        while LOOKING_FOR_SERIAL:
            if not self.queue.empty():
                  return
        ....

 ...
 for i in range(0, 10):
     t = FindSerial(serial, q)
 ...

ループを通過するたびにキューをチェックすることで、別のスレッドが探しているオブジェクトを見つけたかどうかを確認できます。見つかった場合は、run メソッドから戻り、join() がオブジェクトを取得できるようにします。スレッド。

注: 多くのロックの競合を避けるために、おそらくループを介して空の N 回の反復のみをチェックします。

于 2012-06-19T15:32:29.297 に答える