Jeoffreyyang

导航

Python全栈开发学习笔记【Day21】-- process和threading简介

进程和线程

多线程编程的任务有以下特点,

本质上是异步的,需要多个并发事务,各个事务的运行顺序是可以不确定的,随机的,不可预测的。

进程

进程是程序的一次执行。每个进程都有自己的空间,内存,数据栈,及其他记录其运行轨迹的辅助数据。进程间不能直接共享信息,可以通过IPC通讯

线程

所有线程运行在同一进程中,共享运行环境。

线程的运行可能被抢占(中断),暂时挂起(睡眠),让其他线程运行,这叫让步。

race condition 竞态条件,多个线程访问同一个数据地址空间,可能造成数据结果不一致的问题。

 全局解释器锁(GIL)    

  1. 设置GIL.
  2. 切换到一个线程去运行。
  3. 运行:

      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)    收藏  举报