Python全栈开发学习笔记【Day21】-- process和threading简介
进程和线程
多线程编程的任务有以下特点,
本质上是异步的,需要多个并发事务,各个事务的运行顺序是可以不确定的,随机的,不可预测的。
进程
进程是程序的一次执行。每个进程都有自己的空间,内存,数据栈,及其他记录其运行轨迹的辅助数据。进程间不能直接共享信息,可以通过IPC通讯
线程
所有线程运行在同一进程中,共享运行环境。
线程的运行可能被抢占(中断),暂时挂起(睡眠),让其他线程运行,这叫让步。
race condition 竞态条件,多个线程访问同一个数据地址空间,可能造成数据结果不一致的问题。
全局解释器锁(GIL)
- 设置GIL.
- 切换到一个线程去运行。
- 运行:
a. 指定数量的字节码的指令,
b.线程主动让出控制(可以调出time.sleep(0))
4. 把线程设置为睡眠状态
5.解锁GIL
6.再次重复步骤
Threading Module
Thread 表示一个线程执行的对象
Lock 锁对象
Rlock 可重入锁对象
Condition 条件变量对象能让一个线程停下来,等待其他线程满足了某个条件,如,状态的改变或值得改变
Event 通用的条件变量。多个线程可以等待某个事件的发生,在事件发生后所有的线程都会被激活
Semaphere 为等待锁的线程提供一个类似“等候室”的结构
BoundedSemaphore 与Semaphore类似,只是它不允许超过初始值
Timer 与Thread相似,只是它要等待一段时间后才开始运行
Thread类
创建线程的三种方法:
1.创建一个Thread的实例,传给它一个函数;
2.创建一个Thread的实例,传给它一个可调用的类对象;
3.从Thread派生出一个子类,创建一个这个子类的实例;
类的方法:
start() 开始线程的执行
run() 定义线程功能的函数(一般会被子类重写)
join() 程序挂起,直到线程结束
getName()返回线程的名字
setName()设置线程的名字
isAlive()布尔标志,表示这个线程是否还在运行中
isDaemon()返回线程的Daemon标识
setDaemon()把线程的daemon标志设置为Daemonic
activeCount()当前活动的线程对象的数量
currentThread()返回当前线程的列表
enumerate()返回当前活动线程的列表
settrace(func)为所有线程设置一个跟踪函数
setprofile(func)为所有线程设置一个profile函数
生产者-消费者问题和Queue
posted on 2016-07-21 22:11 Jeoffreyyang 阅读(88) 评论(0) 收藏 举报
浙公网安备 33010602011771号