python threading--线程进程

python Threading多线程
进程:
优点:同时利用多个CPU,能够同时运行多个操作
缺点:耗费资源(重新开辟内存空间)
线程:
优点:共享内存 IOP操作时候,创造并发操作
缺点:抢占资源
进程不是越多越好 cpu个数=进程个数
线程也不是越多越好 具体案例具体分析,请求上下文时耗费资源
计算机中执行的最小单元:线程
IO操作利用CPU
GIL 全局解释器锁
IO密集型操作 采用多线程(不耗费CPU)
计算密集型(用CPU)多进程
使用线程和进程的目的都是为了提升效率
(1)单线程单进程: 主进程,主线程
(2)自定义线程:主进程包含多个线程:子线程……………………
2、threading模块可以创建多个线程,不过由于GIL的存在 ,培养天虹的多线程里面其实是快速切换,线面代码是创建线程的简单体验
在默认情况下:程序会等待线程全部执行完毕才会停止的,不过可以设置更改过后台线程,使得主线程不等待子线程,主线程结束则全部结束
在线程里面setDaemon()和join()方法都是经常用的 他们的区别如下:
1)join()方法:主线程A中创建子线程B 并且主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作完成以后,才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的方法join()方法,join([timeout])里面的参数是可选的的,代表线程运行的最大时间,即如果超过这个时间,不管此线程有没有执行完毕,都会被回收,然后主线程或者函数等会接着执行,如果线程执行的时间小于最大时间 则接着执行,不用一定等到参数表示的时间。
2)setDaemon()方法,主线程A中,创建子线成B 并且在主线程A中调用B.setDaemon() 表示:把主线程A设置为守线程,这时候 要是主线程A执行结束了,就不管子线程B是否完成,一并和主线程A退出,与join()的用相反
3)python 多线程里面的锁
在多线程处理任务中,在同时操作一个数据的时候可能会产生脏数据,这个时候就出现了锁的概念,也就是有一个线程在操作该数据的时候 就把该数据锁上,防止别的程序操作此数据,操作完成再开锁
4)pythonduo线程里面的event方法,
该方法就是给线程设置红绿灯,红灯停 绿灯运行
‘’’‘threading event 方法测试’’’
import threading
import time
def do(event):
print(‘start’)
event.waitz() #设置一个红灯,所有线程执行到这里都要等待
print(‘end’)
event_obj = threading.Event #创建一个线程事件
for i in range(10):
t= threading.Thread(target=do,args=(event_obj,))
t.start()
time.sleep(1)
time.sleep(4)
event_obj.clear()
data=input(‘请输入参数:’)
if data=‘true’:
event_obj.set() #变绿
‘‘在测试的过程中出现了错误’’如下图所示 但是用python shell没有问题 不知道是什么原因造成的(请路过的大神帮忙解释一下) 在这里插入图片描述在这里插入图片描述
采用命令行直接操作没有出错
总结 当调整进程的执行顺序,以及进程优先级时,可以通过threading的event方法对进程的执行进度进行控制()对程序的执行设置红绿灯
event_obj.clear,清除event方法,event_obj.set()应该是将程序继续执行

记录Python学习过程,菜鸟刚刚入门,大神勿喷

													                -----大部分信息来自蜗牛仔的python学习笔记
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值