python画樱桃小丸子的程序_多任务---线程threading使用总结。

线程

定义:一个程序运行起来之后,一定有个负责执行代码的东西,这个东西就叫线程。线程占用的资源比较少,操作系统调度的单位。

t = threading.Thread(target=dance) 创建线程实例
t.start() 启动线程,在这里会出现一个子线程

threading.enumerate() 打印当前所有线程,返回一个列表【】

总结:

完成多任务,需要用threading模块来创建多线程来实现,还可以用继承Thread类的形式来创建线程(里面必须定义run方法)。

可以查看正在运行的线程名称

主线程会在子线程均结束后才停止。

调用start后,会出现一个子线程。

资源竞争—互斥锁解决

多线程可以共享全局变量,同时操作全局变量,可能会出现资源竞争的问题。

互斥锁Lock的acquire,release可以解决资源竞争的问题。

死锁:两个线程互相等待对方释放资源时,就会造成死锁。可以用设置等待时间来避免

线程的常用应用:多任务聊天器,或者多个while true同时执行

多线程是假的多任务。

GIL:全局解释器锁,每个线程在执行的过程中均需要先获取到GIL,保证同一时刻只有一个线程可以执行代码。

python和GIL锁没有半毛钱关系,是历史原因cpython解释器造成的,cpython无法移出GIL锁

python释放GIL的情况,在io操作时,是可以暂时释放的,然后在执行完毕后,必须重新获取gil。所以多线程比单线程性能上是有提升的,因为遇到io阻塞会自动释放GIL的。

python使用多进程是可以利用多核的cup资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值