概念

1.线程执行处于alive状态
2.线程A 可以调用线程B 的 join() 方法,调用后线程A 会被挂起,直到线程B 结束。
3.Python 程序的初始线程叫做“main thread”

class threading.Thread(group=None,target=None,name=None,args=(),kwargs={},*,daemon=None)

构造参数 描述
group 这参数是为将来可能出现的 ThreadGroup 类准备的(现在还没有实现)
target 要调用的函数
name 本线程的名字,默认会分配一个形如“Thread-N”的名字
args target的位置参数
kwargs target的关键字参数
daemon 默认为None
对象方法属性 描述
start() 线程的执行,会在独立线程中执行run方法
run()
join(timeout=None) 调用join的线程会一直阻塞调用者的线程,知道自己结束
timeout
name 不同的进程name可以相同,可以通过getName() / setName()
ident “thread identifier”,如果线程还未开始,则为None,新的进程开始时,id可能被收回
is_alive()
daemon 在start之前调用,默认False,只剩下"daemon thread“为alive状态时,整个程序会退出,可通过isDaemon() / setDaemon()访问

应用

1.线程传参

通过argskwargs传参

from threading import Threaddef func(name,age):print("子进程",name,age)
if __name__ == '__main__':t = Thread(target=func, args=('wang',),kwargs={"age":10})t.start()

2.获得线程程执行结果

1)手动Thread创建子线程无法获得执行的结果
2)使用ThreadPoolExecutor可以

from concurrent.futures import ThreadPoolExecutordef func(p):return p*pif __name__ == "__main__":r_lst = []tp = ThreadPoolExecutor(5)for i in range(10):ret = tp.submit(func, i)r_lst.append(ret)tp.shutdown()  # 阻塞,就有线程池完成任务才继续向下执行[print(ret.result()) for ret in r_lst]
  1. 不通过return获得子进程返回结果,而是通过更改共享变量

3.线程同步-join

线程调用join()方法让主线程等待线程的结束

from threading import Thread
import time
def func(name):time.sleep(1)print('子线程结束')if __name__ == '__main__':p = Thread(target=func, args=('wang',))p.start()# p.join() #子线程加上join后,主线程会阻塞直到该子线程结束print("主线程结束")

4.父子线程关系-daemon

父线程结束后,子线程立刻结束,所以没有打印子线程结束

import time
from threading import Threaddef func(name):time.sleep(1)print('子线程结束')if __name__ == '__main__':t = Thread(target=func, args=('xiaobai',))t.daemon = Truet.start()print("主线程结束")

5.创建多个线程

1)手工循环创建
用列表保存每个子线程对象
当然子线程也可以使用join来让主进程等待

import time
from threading import Threaddef func(name):print("线程 %d执行" % name )time.sleep(0.1)if __name__ == '__main__':t_lst = []for i in range(10):t = Thread(target=func, args=(i,))t.start()t_lst.append(p)print("父线程结束")

2)使用线程池
首先,创建进程需要消耗时间,销毁进程(空间,变量,文件信息等等的内容)也需要消耗时间。
定义一个池子,在里面放上固定数量的进程,有需求来了,就拿一个池中的进程来处理任务,等到处理完毕,进程并不关闭,而是将进程再放回进程池中继续等待任务。
不会增加操作系统的调度难度,还节省了开闭进程的时间,也一定程度上能够实现并发效果。

参考:
https://www.cnblogs.com/Frank0128/p/10730817.html
https://my.oschina.net/lionets/blog/194577

python threading.Thread相关推荐

  1. Python threading Thread多线程的使用方法

    Python threading Thread多线程的使用方法 参考资料:<Python 多线程>http://www.runoob.com/python/python-multithre ...

  2. 对Python threading.Thread(daemon=True)线程守护的理解

    最近在练习python多线程编程时发现,在子线程中设置sys.exit()无法退出整个线程,但是如果想达到此目的又不想使用 os._exit()这种暴力的方法,可以使用daemon线程守护.结合网上零 ...

  3. python中stop_thread_为什么python threading.Thread对象有“start”,而没有“stop”?

    完全可以实现如下示例代码所示的Thread.stop方法:import threading import sys class StopThread(StopIteration): pass threa ...

  4. Python多线程thread与threading实现

    python是支持多线程的,并且是native的线程.主要是通过thread和threading这两个模块来实现的. python的thread模块是比较底层的模块,python的threading模 ...

  5. Python中的线程threading.Thread()使用详解

    进行程序开发的时候,肯定避免不了要处理并发的情况,一般使用多线程实现并发. python实现多线程编程需要借助于threading模块. Thread threading 模块中最核心的内容是 Thr ...

  6. python 多线程 线程如何获得返回值 (重写threading.Thread类)

    重写threading.Thread类: # -*- coding: utf-8 -*- """ @File : dontla_ThreadClass.py @Time ...

  7. python中的线程threading.Thread()使用

    1. 线程的概念: 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元.一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.另外,线 ...

  8. python类继承返回值_python继承threading.Thread实现有返回值的子类实例

    继承与threading.thread实现有返回值的子类mythread,废话不多说,大家直接看代码 import threading class mythread(threading.thread) ...

  9. Python:使用threading模块实现多线程编程三[threading.Thread类的重要函数]

    这篇文章主要介绍threading模块中的主类Thread的一些主要方法,实例代码如下: Python代码 ''''' Created on 2012-9-7 @author:  walfred @m ...

最新文章

  1. 《数学建模:基于R》一一2.1 回归分析
  2. LeetCode Search in Rotated Sorted Array II
  3. DPDK vhost-user详解(五)
  4. Java Calendar使用指南
  5. 深度学习:网络的编程模式比较
  6. SAP CRM enterprise search index调试细节
  7. oracle数据库存储结构语句,oracle基本语句(第五章、数据库逻辑存储结构管理)...
  8. 实用!Mybatis中trim标签的使用教程
  9. 训练集、验证集和测试集的比较
  10. FFT蝶形算法的verilog实现专题——从FFT算法的定义开始入手
  11. MyBatis第一天课堂笔记
  12. 获得代理ippython_Python自动获取代理IP
  13. One Drive 回收站文件太多时无法清空回收站解决办法
  14. 快手爬虫 解决粉丝数 关注数等字体加密 python快手爬虫
  15. 英语语法 - 可可英语
  16. 【XSY2498】贪吃蛇(bfs/dfs)
  17. 如何轻松地打造一款免开发RGB 三路产品?
  18. Android 自定义 ListView 上下拉动“刷新最新”和“加载更多”歌曲列表
  19. python判断素数_小白学Python | 你还在说你入不了门吗
  20. 关于事件驱动架构在工作中的一些想法及实践

热门文章

  1. 52 - 算法 - 数据结构 vector
  2. Python视频处理案例六则:旋转视频、调整音量/播放速度、淡入淡出、插入转场素材...
  3. 计算机网络路由器方面的论文,简析计算机网络问题中路由器故障的论文
  4. Web服务器与Servlet容器初步认识
  5. 本人薛广涛,2004年毕业于上海交通大学计算机系软件与理论专业,上海交通大学计算机科学与工程系(CSE)...
  6. jwt判断token是否过期_4spring-security5整合jwt做登录、权限验证,全网最全!!!可用...
  7. dos 退出mysql_【转】MySQL 一闪退出解决_MySQL
  8. ipv4改完保存不成功_win7系统没法保存修改后IP地址的解决方法
  9. linux C++获取当前文件所在路径的方法
  10. vscode+vim使用技巧