如何在python中完成第二个线程时停止第一个线程?

时间:2012-11-24 14:44:15

标签: python multithreading python-multithreading

第二个线程完成后有没有办法停止第一个线程?

示例:

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))))))

在上面的例子中,我在线程中运行两个函数,我必须在第二个线程完成时停止第一个线程。我读到它支持事件,但不幸的是我还没有使用它。

1 个答案:

答案 0 :(得分: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)