python系列文章目录
python基础(01变量&数据类型&运算符)
python基础(02序列共性)
python基础(03列表和元组)
python基础(04字符串&字典)
python基础(05集合set)
python基础(06控制语句)
python基础(07函数)
python基础(08类和对象)
python基础(09闭包&装饰器)
python基础(10异常处理)
python基础(11文件读取)
python基础(12迭代器&生成器)
python基础(13魔法方法介绍)
python基础(14内置函数介绍)
文章目录
- python系列文章目录
- 前言
- 一、概念
- 二、threading、Thread类
- 1.例子1
- 2.例子2
- 3.例子3
- 总结
前言
本文主要介绍多线程编程,所介绍的比较基础,理解即可,本文是python基础知识的最后一文。python基础系列文章一共更新了15篇,本文更新后,接下来会更新python中常见的一些面试题,有需求的朋友,可以关注一波,后期查看。
一、概念
进程:
正在运行的程序实体,QQ,这个运行程序占据所有系统资源(CPU、内存、网盘资源),不能与其他进程共享资源
线程:
一个进程里包括了一个或多个线程
并发:
通过CPU的调度算法、让用户看上去同时执行,实际上CPu操作层面不是真正的同时
并行:
真正的同时
注意:
python GIL(global、interprter、lock)全局锁,只有一个线程在解释器中运行,python是伪多线程
二、threading、Thread类
- 创建一个Thread实例,传递一个函数
- 注意:看起来像并行,实际上是并发
1.例子1
#创建一个函数
import time
from threading import Threaddef func( name,sec):print("-------开始---------",name,'时间',time.ctime())time.sleep(sec)print("-------结束---------", name, '时间', time.ctime())#创建Thread实例,生成线程
t1=Thread(target=func,args=("线程1",2))
t2=Thread(target=func,args=("线程2",3))#启动线程执行
t1.start()
t2.start()#等待线程执行完毕,结束
t1.join()
t2.join()----------------------------------------->
-------开始--------- 线程1 时间 Sat Aug 31 21:02:34 2024
-------开始--------- 线程2 时间 Sat Aug 31 21:02:34 2024
-------结束--------- 线程1 时间 Sat Aug 31 21:02:36 2024
-------结束--------- 线程2 时间 Sat Aug 31 21:02:37 2024
2.例子2
#创建一个类
import time
from threading import Threadclass Thread_Demo:def func( self,name,sec):print("-------开始---------",name,'时间',time.ctime())time.sleep(sec)print("-------结束---------", name, '时间', time.ctime())t1=Thread(target=Thread_Demo().func,args=("线程1",2))
t2=Thread(target=Thread_Demo().func,args=("线程2",3))#启动线程执行
t1.start()
t2.start()#等待线程执行完毕,结束
t1.join()
t2.join()------------------------------------------------------------------------------->>
-------开始--------- 线程1 时间-------开始--------- 线程2 时间 Sat Aug 31 21:14:19 2024Sat Aug 31 21:14:19 2024
-------结束--------- 线程1 时间 Sat Aug 31 21:14:21 2024
-------结束--------- 线程2 时间 Sat Aug 31 21:14:22 2024
3.例子3
import datetime
import threading
import time
from threading import Threadlst=["搬砖"+str(i) for i in range(1,3)]def pop_item():while True:if len(lst)==0:break#lst.pop()item=lst.pop()print(threading.current_thread(),"还剩{}".format(len(lst)))time.sleep(1)if __name__=='__main__':start_time=datetime.datetime.now()#pop_item(lst)t1=Thread(target=pop_item,args=())t2=Thread(target=pop_item,args=())t1.start()t2.start()t1.join()t2.join()end_time=datetime.datetime.now()print((end_time-start_time).seconds)
----------------------------------------------------------------------
<Thread(Thread-1 (pop_item), started 6105100288)> 还剩1
<Thread(Thread-2 (pop_item), started 6121926656)> 还剩0
1
总结
本文主要简单介绍一下什么是多线程编程,知道python中是伪线程,了解其用法即可,python基础系列,基础知识更新完毕。接下来将持续更新python中的一些面试题,以及软件测试的面试题目。