Python36 1.joinablequeue 2.线程理论 3.多线程对比多进程 4.线程的使用方式 4.1.产生 线程的两种方式 4.2.守护线程 4.3.线程安全问题 4.3.1.互斥锁 4

Posted llx--20190411

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python36 1.joinablequeue 2.线程理论 3.多线程对比多进程 4.线程的使用方式 4.1.产生 线程的两种方式 4.2.守护线程 4.3.线程安全问题 4.3.1.互斥锁 4相关的知识,希望对你有一定的参考价值。

复习
1.守护进程
2.互斥锁(解决数据错乱的方法)
3.IPC(进程间通讯)
4.生产者与消费者模型

详解:
1.守护进程
一个进程可以设为另一个进程的守护进程
特点:被守护的进程结束时,守护进程也会随之结束
本质:父进程交给子进程一个任务,然而父进程 先于子进程结束了,子进程的任务也就没有必要 继续执行了
格式:开始前加 p.daemon=True

2.互斥锁(解决数据错乱的方法)
方法一:互斥锁
互斥 互相排斥
锁的本质:一个标志
标志的两个状态:
1.锁定
2.未锁定
什么时候用?
当多个进程要操作同一个资源时,就会造成数据错乱,通常将1.写入操作加锁 2.读取操作不需加
锁的作用:(优缺点)
(缺点:)加锁会把原本并发的任务,修改为串行,降低了效率 (优点:)保证了数据的安全性,锁可以指定一部分代码串行,其他仍然并发
重点考虑问题:加锁的位置
注意:
1.要保证安全必须保证大家用的是同一把锁
2.不能对一把锁连续执行acquire,将会导致死锁
方法二:
join
本质:
1.join也可以将任务变为串行
2.join固定任务的执行顺序
3.join会使得子进程的代码全部串行,并且主进程也会阻塞住

3.IPC
进程间通讯:
1.管道(subprocess)
单向通讯,传输的是二进制
2.共享文件(with open()as f)
数据量几乎不受限制,但是速度慢
3.共享内存(1.Manager2.Queue)
数据量较小 但是速度快
4. socket("服务器","客户端")
编程复杂 ,传输的是二进制

最主要的内容就是共享内存:
1.Manager()类 了解
2.Queue队列 (q=Queue()) 必须掌握的方法
是一种数据容器,
特点:先进先出,并且进程中的队列 可以共享数据,自带锁机制

4.生产者消费者模型
要解决的问题:生产者与消费者能力不平衡,导致效率低
如何解决?
1.把生产者和消费者分开耦合,即把任务分到不同进程中 各司其职
2.分开后,由于进程间相互隔离,所以需要一个共享容器,Queue 闪亮登场
(1.解决了数据交换问题2.锁的问题)


今日内容
1.joinablequeue
2.线程理论
3.多线程对比多进程
4.线程的使用方式
--1.产生 线程的两种方式
--2.守护线程
--3.线程安全问题
----1.互斥锁
----2.死锁
----3.可重入锁
----4.信号量




以上是关于Python36 1.joinablequeue 2.线程理论 3.多线程对比多进程 4.线程的使用方式 4.1.产生 线程的两种方式 4.2.守护线程 4.3.线程安全问题 4.3.1.互斥锁 4的主要内容,如果未能解决你的问题,请参考以下文章

python37 1.GIL--全局解释器锁 2.GIL带来的问题 3.为什么需要GIL 4.GIL的加锁解锁时机 5.关于GIL的性能的讨论 6.线程常用方法 7.GIL锁与自定义锁的区别 8.进

python36安装

yum 安装 python36 及 pip

Python内置函数(36)——iter

Python - 如何将 python36 命令行中的行保存到 .py 文件中?

python36--对象