4

2番目のスレッドが終了したときに最初のスレッドを停止する方法はありますか?

例:

from functools import partial

import threading

def run_in_threads(*functions):
    threads=[]

    for function in functions:
        thread=threading.Thread(target=function)
        thread.start()
        threads.append(thread)

    for thread in threads:
        thread.join()

def __print_infinite_loop(value):
    while True:print(value)

def __print_my_value_n_times(value,n):
    for i in range(n):print(value)

if __name__=="__main__":
    run_in_threads(partial(__print_infinite_loop,"xyz"),partial(__print_my_value_n_times,"123",1000))))))

上記の axample では、スレッドで 2 つの関数を実行しています。2 番目のスレッドが終了したら、最初のスレッドを停止する必要があります。イベントでサポートされていると読みましたが、残念ながらまだ使用していません。

4

1 に答える 1

1

threading.Event次のように使用できます。

import functools
import threading

def run_in_threads(*functions):
    threads = []

    for function in functions:
        thread = threading.Thread(target = function)
        thread.daemon = True
        thread.start()
        threads.append(thread)

    for thread in threads:
        thread.join()

def __print_infinite_loop(value, event):
    while not event.is_set():
        print(value)

def __print_my_value_n_times(value, n, event):
    for i in range(n):
        print(value)
    event.set()

if __name__ == "__main__":
    event = threading.Event()
    infinite_loop = functools.partial(__print_infinite_loop, "xyz", event)
    my_values = functools.partial(__print_my_value_n_times, "123", 10, event)
    run_in_threads(infinite_loop, my_values)
于 2012-11-24T14:56:34.910 に答える