加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

如何在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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读