如何在python中完成第二个线程时停止第一个线程?
发布时间:2020-12-20 13:31:39 所属栏目:Python 来源:网络整理
导读:有没有办法在第二个线程结束时停止第一个线程? 例: from functools import partialimport threadingdef run_in_threads(*functions): threads=[] for function in functions: thread=threading.Thread(target=function) thread.start() threads.append(thr
|
有没有办法在第二个线程结束时停止第一个线程?
例: 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))))))
在上面的例子中,我在线程中运行两个函数,并且我必须在第二个线程完成时停止第一个线程.我读到它支持事件,但不幸的是我还没有使用它. 解决方法
你可以像这样使用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,10,event)
run_in_threads(infinite_loop,my_values)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
