为了账号安全,请及时绑定邮箱和手机立即绑定

Python多线程学习笔记

标签:
Python

进程

是一个执行中的程序

每一个进程都拥有自己的地址空间、内存、数据栈以及其他用于跟踪执行的辅助数据

操作系统管理其他上所有进程的执行,并未这些进程合理的分配时间

进程可以通过派生(fork或者spawn)新的进程来执行其他任务。

线程

在同一个进程下执行,并共享相同的上下文

一个进程中的各个线程与主线程共享一片数据空间

线程包括开始、执行顺序和结束三部分

它可以被抢占(中断)和临时挂机(睡眠)----让步

并发

是一种属性--程序、算法或者问题的属性

并发只是并发问题的可能方法之一

如果两个事件互不影响,则两个事件是并发的。

对多核的利用

单核CPU系统中,不存在真正的并发

GIL-全局解释器锁

GIL强制在任何时候只有一个线程可以执行Python代码

I/O密集型应用与CPU密集型应用

GIL执行顺序

1、设置GIL

2、切换进一个线程去执行

3、执行下面操作之一:

ˇ指定数量的字节码指令     ˇ线程主动让出控制权(可以调用time.sleep(0)来完成)

4、把线程设置为睡眠状态

5、解锁GIL

6、重复上面步骤。

实现一个线程

用threading模块代替thread模块

用threading.Tread创建线程

start()启动线程

join()挂起线程

threading模块对象:

Thread 表示一个执行线程的对象

Lock 锁原语对象(和)

RLock 可重入锁对象,使单一线程可以获得已持有的锁

Condition 条件变量对象,使得一个线程等待另一个线程满足特定的条件,比如改变状态或者某个数值

Event 条件变量的通用版本,任意数量的线程等待某个事件的发生,在该事件发生后所有线程将被激活

Semaphore 为线程间共享的有限资源提供一个计数器,如果没有可用资源时候会阻塞

BoundedSemaphore 与Semaphore相似,不过它不允许超过初始值

Timer 与Thread相似,不过它要在运行前等待一段时间

Barrier 创建一个“障碍”,必须达到指定数量的线程后才可用继续。

Thread对象数据属性

name 线程名  ident线程的标识符 deamon表示这个线程是否是守护线程

Thread对象方法:略

多线程中的锁实现

lock()   添加锁mylock.acquire()      释放锁 mylock.release()  产生死锁

Rlock() 同一线程中可用重复锁

Condition()

线程的调度和优化

线程池 在multiprocessing.dummy

ThreadPoolExecutor()

进程

fork 只在Unix中使用

使用multiprocessing实现多进程代码

用multiprocessing.Process创建进程

start()启动进程                                      join()挂起进程

os.getpid()获得进程ID

进程之间的通信

通过Queue、Pipes等实现进程之间的通信

.terminate()结束  Queue共享数据

多进程中的锁

lock Rlock Condition





点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消