Python多线程编程之线程结束

当一个线程依赖于另一个线程的运行结果时,就可以调用另一个线程的join()方法等待它运行完成 example:importthreadingimporttimeshared_value=0defthread_body():globalshared_valueprint('ThreadA开始...')for_inrange(5):print('ThreadA执行中...')shared_value+=1time.sleep(1)print('ThreadA结束...
Python多线程编程之线程结束
线程管理包括线程创建、线程启动、线程休眠、等待线程结束和线程停止。线程创建、线程启动、线程休眠前文已提到过,这里不再赘述。
1 等待线程结束等待线程结束使用的是join()方法,当前线程调用t1线程的join()方法时则阻塞当前进程,等待t1线程结束。如果t1线程结束或等待超时,则当前线程回到活动状态继续执行。join()方法语法如下:
join(timeout=None)
参数timeout是设置超时时间,单位是s。如果没有设置timeout,则可以一直等待
当一个线程依赖于另一个线程的运行结果时,就可以调用另一个线程的join()方法等待它运行完成
example:
importthreadingimporttimeshared_value=0defthread_body():globalshared_valueprint('ThreadA开始......')for_inrange(5):print('ThreadA执行中......')shared_value+=1time.sleep(1)print('ThreadA结束......')defmain():print('主线程开始......')t1=threading.Thread(target=thread_body,name='ThreadA')t1.start()print('主线程被阻塞......')t1.join()print(f'value={shared_value}')print('主线程继续执行......')
result:
主线程开始......ThreadA开始......主线程被阻塞......ThreadA执行中......ThreadA执行中......ThreadA执行中......ThreadA执行中......ThreadA执行中......ThreadA结束......value=5主线程继续执行......
这里设置了一个共享变量shared_value,线程主体中对该变量进行了修改。在主函数里面调用了t1的join()方法,就会导致主线程阻塞,等待线程t1执行结束,主线程才会继续执行。从结果来看,主线程缺失被阻塞了,打印出来的shared_value的值已经由0变成5了
2 线程停止对于有些复杂业务,需要设置一个线程停止变量来决定线程停止。例如,有一个抓取数据的系统,每隔半小时获取执行一次数据抓取任务。数据抓取任务一般在子线程中进行,休眠一段时间再执行。这个子线程中国会有一个死循环。为了能停止子线程,应设置一个线程停止变量
example:
importthreadingimporttimeis_running=Truedefthread_body():whileis_running:print('ThreadA开始......')#数据抓取任务print('ThreadA执行中......')time.sleep(1)print('ThreadA结束......')print('整个程序执行完成')defmain():print('主线程开始......')t1=threading.Thread(target=thread_body)t1.start()command=input('请输入停止指令:')ifcommand=='exit':globalis_runningis_running=Falseif__name__=='__main__':main()
result:
主线程开始......ThreadA开始......ThreadA执行中......请输入停止指令:exitThreadA结束......整个程序执行完成
这里设置了一个线程停止变量is_running,默认值为True.当用户通过键盘在控制台输入exit时,其值变为False,然后程序终止。需要注意的是,控制台输入exit后,还需要按enter键才可以。
2024-09-19
mengvlog 阅读 30 次 更新于 2025-08-11 06:16:37 我来答关注问题0
  •  科创17 Python多线程总结

    Python 提供了 threading 模块来实现多线程:因为新建线程系统需要分配资源、终止线程系统需要回收资源,所以如果可以重用线程,则可以减去新建/终止的开销以提升性能。同时,使用线程池的语法比自己新建线程执行线程更加简洁。Python 为我们提供了 ThreadPoolExecutor 来实现线程池,此线程池默认子线程守护。它的...

  •  翡希信息咨询 Python中,线程threading详解

    一、线程同步机制 锁:用于保护共享数据,确保同一时间只有一个线程可以修改共享变量。使用lock.acquire获取锁,lock.release释放锁。GIL锁:全局解释器锁,在全局解释器级别限制同一时间只有一个线程执行,与Lock锁在线程级别不同。死锁:多线程中常见问题,由于线程相互等待资源导致无法继续执行。解决策略包括避...

  •  翡希信息咨询 Python 线程,进程,多线程,多进程以及并行执行for循环笔记

    1. 线程与进程 线程:线程是操作系统能够进行运算调度的最小单位,适合I/O密集型任务,如网络请求。在Python中,由于GIL的存在,多线程在CPU密集型任务上的并行度受限。 进程:进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。多进程适用于CPU密...

  • Python的多进程、多线程、协程的讨论中,"join"这个关键字是经常被忽视的。首先明确,进程与线程的区别在于进程共享内存,而线程共享进程的内存。而协程则是一种轻量级的线程,更适用于控制流程的上下文。在实现多线程时,"join"用于等待一个线程完成执行。对比下面两段代码,可以看到"join"的差异。代码1...

  • 在多线程环境中,Python 虚拟机按以下方式执行: 由于GIL的存在,Python的多线程不能称之为严格的多线程。因为 多线程下每个线程在执行的过程中都需要先获取GIL,保证同一时刻只有一个线程在运行。 由于GIL的存在,即使是多线程,事实上同一时刻只能保证一个线程在运行, 既然这样多线程的运行效率不就和单线程一样了...

檬味博客在线解答立即免费咨询

Python相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部