本篇文章给大家分享的是有关python中线程与线程池的作用分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
<强>线程强>
进程和线程
什么是进程?
进程就是正在运行的程序,一个任务就是一个进程,进程的主要工作是管理资源,而不是实现功能
什么是线程?
线程的主要工作是去实现功能,比如执行计算。
线程和进程的关系就像员工与老板的关系,
老板(进程)提供资源和工作空间,
员工(线程)负责去完成相应的任务
<强>特点强>
一个进程至少由一个线程,这一个必须存在的线程被称为主线程,同时一个进程也可以有多个线程,即多线程
当我们我们遇到一些需要重复执行的代码时,就可以使用多线程分担一些任务,进而加快运行速度
线程的实现
<强>线程模块强>
Python通过两个标准库_thread和线程、提供对线程的支持,线程对_thread进行了封装。
线程模块中提供了线程、锁,RLock,条件等组件。
因此在实际的使用中我们一般都是使用线程来实现多线程
线程包括子线程和主线程:
主线程:当一个程序启动时,就有一个线程开始运行,该线程通常叫做程序的主线程
子线程:因为程序是开始时就执行的,如果你需要再创建线程,那么创建的线程就是这个主线程的子线程
主线程的重要性体现在两方面:
- <李>
是产生其他子线程的线程
李> <李>通常它必须最后完成执行,比如执行各种关闭操作
李><强>线程类强>
常用参数说明
<强>常用实例方法强>
方法作用Thread.run(自我)线程启动时运行的方法,由该方法调参用目标数所指定的函数Thread.start(自我)启动进程,开始方法就是区帮你调用运行方法Thread.terminate(自我)强制终止线程线程。加入(自我,超时=None)阻塞调用,主线程进行等待线程。setDaemon(自我,恶魔的)将子线程设置为守护线程,随主线程结束而结束线。getName(自我,名称)获取线程名线程。setName(自我,名称)设置线程名<强>创建线程强>
在python中创建线程有两种方式,实例线程类和继承重写线程类
<强>实例线程类强>
import 线程 import 时间 def 运行(名称,年代):,#,线程要执行的任务 ,time . sleep (s) #,停两秒 ,打印(& # 39;小姐:am % & # 39;, %,名称) #,实例化线程类,,并传入函数及其参数,,==t1 threading.Thread(目标运行,,name=& # 39;一个# 39;,,arg游戏=(& # 39;一个# 39;,,5))==t2 threading.Thread(目标运行,,name=& # 39;两个# 39;,,arg游戏=(& # 39;两个# 39;,,2)) #,开始执行,,这两个线程会同步执行 t1.start () t2.start () print (t1.getName()) #,获取线程名 print (t2.getName ()) #,结果: 一个 两个 小姐:am 两个#,运行2 s后 小姐:am 一个#,运行5 s后
<强>继承线程类强>
class MyThread (threading.Thread):, #,继承中线程的线程类 ,#线程所需的参数 ,def __init__(自我,,名字,,秒): ,super () . __init__ () self.name =,名称 self.second ,=,第二个 ,#重写运行方法,表示线程所执行的任务,必须有 ,def 运行(自我): ,time . sleep (self.second) ,打印(& # 39;小姐:am % & # 39;, %, self.name) #,创建线程实例 时间=t1 MyThread(& # 39;一个# 39;,,5) 时间=t2 MyThread(& # 39;两个# 39;,,2) #,启动线程,实际上是调用了类中运行的方法 t1.start () t2.start () t1.join () print (t1.getName ()) print (t2.getName ()) #,结果: 小姐:am 两个#,运行后2 s 小姐:am 一个#,运行后5 s 一个 以前两个><>强常用方法强>
<>强加入()强>
阻塞调用程序,直到调用加入()方法的线程执行结束,才会继续往下执行
#,开始执行,,这两个线程会同步执行 t1.start () t2.start () t1.join() #,等待t1线程执行完毕,再继续执行剩余的代码 print (t1.getName ()) print (t2.getName ()) #,结果: 小姐:am 2 小姐:am 一个 一个 以前两个python中线程与线程池的作用分别是什么