Python 学习笔记21

多线程

Python提供thread模块支持多线程。

 

import thread

def f1(lock):

              None

              lock.release()

def f2(lock):

              None

              lock.release()

def main():

              lock1= thread.allocate_lock()

            lock1.acquire()

 

              thread.start_new_thread(f1,(lock1))

 

              lock2= thread.allocate_lock()

            lock2.acquire()

              thread.start_new_thread(f2,(lock2))

             

 

 

if __name__ == ‘__main__’:

              main()

start_new_thread()要求一定要有前两个参数。就算运行的函数不要参数,也要传一个空的元组。

 

 

Python 不推荐使用thread模块,因为thread模块不支持守护线程。

更高级的线程模块是threading模块。

threading 模块对象

 

threading 模块对象               描述

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

Lock                  锁原语对象(跟 thread 模块里的锁对象相同)

 

RLock                可重入锁对象。使单线程可以再次获得已经获得了的锁(递归锁定)。

 

Condition            条件变量对象能让一个线程停下来,等待其它线程满足了某个“条件”。

如,状态的改变或值的改变。

 

Event                通用的条件变量。多个线程可以等待某个事件的发生,在事件发生后,所有的线程都会被激活。

 

Semaphore            为等待锁的线程提供一个类似“等候室”的结构

 

BoundedSemaphore     与 Semaphore 类似,只是它不允许超过初始值

 

Timer               与 Thread 相似,只是,它要等待一段时间后才开始运行。

 

 

Thread 对象的函数

 

函数                    描述

start()          开始线程的执行

run()           定义线程的功能的函数(一般会被子类重写)

join(timeout=None) 程序挂起,直到线程结束;如果给了 timeout,则最多阻塞 timeout 秒

getName()        返回线程的名字

setName(name)     设置线程的名字

isAlive()       布尔标志,表示这个线程是否还在运行中

isDaemon()        返回线程的 daemon 标志

setDaemon(daemonic) 把线程的 daemon 标志设为 daemonic(一定要在调用 start()函数前调用)

 

生产者-消费者问题和 Queue 模块

常用的Queue 模块的属性

 

函数            描述

Queue 模块函数

queue(size)    创建一个大小为 size 的 Queue 对象

 

Queue 对象函数

qsize()  返回队列的大小(由于在返回的时候,队列可能会被其它线程修改,所以这个

值是近似值)

empty()        如果队列为空返回 True,否则返回 False

full()         如果队列已满返回 True,否则返回 False

put(item,  block=0) 把item 放到队列中,如果给了 block(不为0),函数会一直阻塞到队列中有空间为止

get(block=0)    从队列中取一个对象,如果给了 block(不为 0),函数会一直阻塞到      

队列中有对象为止

 

 

 

 

 

多线程相关的标准库模块

模块    描述

thread  基本的,底级别的线程模块

threading  高级别的线程和同步对象

Queue  供多线程使用的同步先进先出(FIFO)队列

mutex  互斥对象

SocketServer 具有线程控制的 TCP 和UDP 管理器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值