python多线程

Python多线程自学笔记

倖福魔咒の 提交于 2020-02-12 23:15:21
threading 模块 Thread 类的用法详解 这篇笔记主要是简化了 https://blog.csdn.net/briblue/article/details/85101144 如何理解线程 引用知乎上一个高赞的回答 创建Thread对象有2种方法 直接创建Thread,并通过函数回调处理任务 编写自定义类继承Thread 总结知识 如何给线程赋值名字 如何知道线程是否继续运行 如何提供线程阻塞手段 如何主线程结束的同时子线程也立马结束 1.1创建Thread,并通过函数回调处理任务的方法 这个方法最重要的参数是target,直接上代码 import threading import time def test ( ) : for i in range ( 5 ) : print ( 'test ' , i ) time . sleep ( 1 ) thread = threading . Thread ( target = test ) thread . start ( ) for i in range ( 5 ) : print ( 'main ' , i ) time . sleep ( 1 ) 代码运行结果 test 0 main 0 main 1 main 2 main 3 main 4 test 1 test 2 test 3 test 4 1

python线程的学习

。_饼干妹妹 提交于 2020-02-12 03:44:16
1. 什么是线程 由于进程是资源拥有者,创建、撤消与切换存在较大的内存开销,因此需要引入轻型进程 即线程, 进程是资源分配的最小单位,线程是CPU调度的最小单位(程序真正执行的时候调用的是线程)。每一个进程中至少有一个线程。 2. 进程与线程的关系 举个栗子 :一个屋子里有很多人,那么这个屋子就相当于一个进程,里面的每一个人就相当于一个线程。但进程不只是包含线程,还包含其他资源,数据库等。进程是资源的集合。 3. 进程与线程的区别和联系 运行方式不同: 进程不能单独执行,它只是资源的集合。进程要操作CPU,必须要先创建一个线程,所有在同一进程中的线程,是同享同一块进程所占的内存控件。 联系: 进程中第一个线程是主线程,主线程可以创建其他线程,其他线程也可以创建主线程,线程之间是平等的。 线程的实例方法: (了解即可) - getName(): 获取线程的名称。 - setName(): 设置线程的名称。 - isAlive(): 判断当前线程存活状态。 4. run方法的继承: 代码演示: #父类 class A : def __init__ ( self ) : print ( "父类init被触发" ) def run ( self ) : print ( "父类的run方法被调用" ) #子类 class B ( A ) : def run ( self ) : print

Python多线程

我的梦境 提交于 2020-02-11 19:31:02
多线程的使用 关于线程、进程以及协程我相信在所有的语言中都会涉及到,它们的功能非常强大,我对于这三种的学习也不够深,在今后的生活中会一直学习下去,今天我就先把我学到的记录一下,时刻勉励自己学习。 线程 多线程类似同时执行多个不同的程序,每个独立的线程都有一个程序的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。线程的概念理解起来可能比较抽象,它是操作系统能够进行运算调度的最小单位。本质上是一串指令的集合。 在python3中,我们使用threading模块来支持多线程,那么我们先来写一个最简单的多线程: import threading import time def run1(): print('我是第一个线程') time.sleep(2) def run2(): print('我是第二个线程') time.sleep(2) start_time=time.time() t1=threading.Thread(target=run1) t2=threading.Thread(target=run2) t1.start() t2.start() t1.join() t2.join() end_time=time.time() print(end_time-start_time) output: 我是第一个线程

python语法基础-并发编程-协程-长期维护

。_饼干妹妹 提交于 2020-02-10 05:55:57
############### 协程 ############## # 协程 # 小知识点, # 协程和进程和线程一样都是实现并发的手段, # 开启一个线程,创建一个线程,还是需要开销, # 协程 # 协程本质上是一个线程, # 什么是协程:能够在多个任务之间切换来节省一些IO时间, # 不需要再浪费线程之间的切换了,只需要做程序之间的切换, # 程序任务之间的切换也是需要消耗时间,但是开销远远小于进程线程之间的切换, # from greenlet import greenlet # # 这个模块可以实现协程的多个任务的切换, # # 这个greenlet就是真正的协程模块, # # def eat(): # print("eat start") # g2.switch() # print("eat end") # # # def play(): # print("play start") # g1.switch() # print("play end") # # # g1 = greenlet(eat) # 注册, # g2 = greenlet(play) # g1.switch() # 切换 # g2.switch() """ eat start play start eat end play end 这就是实现了协程之间的切换 """ # 我们在工作中会使用进程,线程

复习打卡--0821多线程并发

偶尔善良 提交于 2020-02-10 01:10:50
一、并发和并行 并发 :任务数>CPU核数,通过系统的各任务调度算法,来回切换,实现多个任务“一起”运行,实际上不是真正同时一起运行,只是切换运行的速度相当快,看上去是一起执行的而已; 并行 :任务数<=CPU核数,是真正的一起同时运行。 同步 :同步是指代码调用IO操作时,必须等待IO操作完成返回才调用的方式,只有一个主线; 异步 :异步是指代码调用IO操作时,不必等待IO操作完成返回才调用的方式,存在多条主线; from threading import Thread import time def timer(fun): def wrapper(*args,**kwargs): time1 = time.time() fun(*args,**kwargs) time2=time.time() print("当前函数运行时间为:{}".format(time2-time1)) return time2-time1 return wrapper def work1(): for i in range(6): time.sleep(1) print(f'第{i}次浇花中') def work2(name): for i in range(5): time.sleep(1) print(f'第{i}次{name}打墙中') # 同步运行如下,需用11s多 @timer def

线程与进程

时间秒杀一切 提交于 2020-02-09 00:06:56
一、线进程若干概念 1.并发:程序,任务,用户 2.多道程序设计:A_IO阻塞----->切换到B_通道----->B_IO阻塞------>切换到C_通道 3.spooling(外部设备联机并行操作):它是Simultaneous Peripheral Operations On-Line的缩写,它是关于慢速 字符设备 如何与计算机主机交换信息一种技术,通常称为“ 假脱机 技术”。原理就是当一个额外的设备送到内存等待区域时,当操作系统处理完一个事件后,额外设备中的事件可以迅速被操作系统读出,装进空出来的内存区运行。 二、实例导入: 线程:threading.Thread(target=函数名,args=形参名) import threading from time import ctime, sleep import time def ListenMusic(name): print("Berlin listening to %s. %s" %(name,ctime())) sleep(3) print("end listening %s"%ctime()) def RecordBlog(title): print("Begin recording the %s! %s"%(title,ctime())) sleep(5) 线程和进程若干方法 1.守护线程Setdaemon t1

网络并发面试集锦(1-50)

老子叫甜甜 提交于 2020-02-08 18:50:03
目录 1、python的底层网络交互模块有哪些? 2、简述OSI七层协议 3、什么是C/S和B/S架构? 4、简述TCP协议? 5、什么是arp协议? 6、tcp和UDP的区别?为什么tcp协议更可靠? 7、什么是局域网和广域网? 8、什么是socket?简述基于tcp协议的套接字通信流程? 9、什么是粘包?socket中造成粘包的原因是什么?那些情况会发送粘包现象? 10、IO多路复用的作用? 11、什么是防火墙以及作用? 12、select、poll、epoll模型的区别? 13、简述进程、线程、协程的区别以及应用场景? 14、什么是GIL全局解释器锁? 15、Python中如何使用线程池和进程池? 16、threading.local的作用? 17、进程之间二u和进行通讯? 18、什么是并发和并行? 19、同步和异步,阻塞和非阻塞的区别? 20、路由器和交换机的区别? 21、什么是域名解析? 22、如何让修改本地的hosts文件? 23、生产者和消费者模型应用场景? 24、什么是cdn服务? 25、有A.txt和B.txt两个文件,使用多进程和进程池的方式分别读取这两个文件? 26、那些是常见的TCPFlags? 27、tracerroute--一般使用的是哪种网络层协议? 28、iptabkes只是考察,根据要求写出防火墙规则? 29、socket套接字编程? 30

Python3 多线程的两种实现方式

女生的网名这么多〃 提交于 2020-02-08 17:33:07
最近学习 Python3 ,希望能掌握多线程的使用,在此做个笔记。同时也希望Python 牛人指点错误。关于线程的概念,前面简单总结了一下 java 的多线程,传送门: java 多线程概念,三种创建多线程的方法 。 这里记两种多线程的实现方式方法。 Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。 方式一:把一个函数传入并创建Thread实例,然后调用start()开始执行 import threading def loop(): for i in range(30): print(threading.current_thread().name + " --- " + str(i)) threadA = threading.Thread(target=loop, name="线程A") threadB = threading.Thread(target=loop, name="线程B") threadA.start() threadB.start() 执行结果部分截图如下: 方式二:定义一个类,继承自 threading.Thread类,使用 init(self) 方法进行初始化,在 run(self)

Cpython支持的进程与线程(Day33)

萝らか妹 提交于 2020-02-08 02:54:31
一、multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程。python中提供了非常好的多进程包 multiprocessing。 multiprocessing 模块用来开启子进程,并在子进程中执行功能(函数),该模块与多线程模块threading的编程接口类似。 multiprocessing 的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。 二、Process类的介绍 1.创建进程的类 Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动) 强调: 1. 需要使用关键字的方式来指定参数 2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号 2.参数介绍 group参数未使用,值始终为None target表示调用对象,即子进程要执行的任务 args表示调用对象的位置参数元组,args=(1,2,'egon',) kwargs表示调用对象的字典,kwargs={'name':'egon','age':18} name为子进程的名称 3.方法介绍 p.start():启动进程,并调用该子进程中的p

Cpython支持的进程与线程

你离开我真会死。 提交于 2020-02-08 02:53:39
Cpython支持的进程与线程 一、multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分情况使用多进程。python中提供了非常好的多进程包 multiprocessing。 multiprocessing 模块用来开启子进程,并在子进程中执行功能(函数),该模块与多线程模块threading的编程接口类似。 multiprocessing 的功能众多:支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。 二、Process类的介绍 1.创建进程的类 Process([group [, target [, name [, args [, kwargs]]]]]),由该类实例化得到的对象,表示一个子进程中的任务(尚未启动) 强调: 1. 需要使用关键字的方式来指定参数 2. args指定的为传给target函数的位置参数,是一个元组形式,必须有逗号 2.参数介绍 1 group参数未使用,值始终为None 2 3 target表示调用对象,即子进程要执行的任务 4 5 args表示调用对象的位置参数元组,args=(1,2,'egon',) 6 7 kwargs表示调用对象的字典,kwargs={'name':'egon','age':18} 8 9 name为子进程的名称 3