摘要:队列的类型和常用方法 队列是一种数据结构,它类似于列表。但列表是线程不安全的,而队列是线程安全的。 python的queue(python3,python2为Queue)提供了3种队列: Queue:先进先出型(First In First Out)。 LifoQueue:后进先出型(Last In
阅读全文
03 2019 档案
摘要:队列的类型和常用方法 队列是一种数据结构,它类似于列表。但列表是线程不安全的,而队列是线程安全的。 python的queue(python3,python2为Queue)提供了3种队列: Queue:先进先出型(First In First Out)。 LifoQueue:后进先出型(Last In
阅读全文
摘要:在python的多线程体系中,一共有4种锁: 同步锁(互斥锁):Lock; 递归锁:RLock; 信号量:Semaphore; 同步条件锁:Condition. 信号量(semaphore)是一种可以控制线程并发数的锁,也就是控制同一时刻有多少线程可以获取内存资源。信号量通过内部计数器来控制线程的进
阅读全文
摘要:Event对象: 用于线程间的通信,某个线程需要根据其他线程的状态来判断自己的下一步操作。 Event内部定义了一个全局变量:_flag,默认为False。 当_flag = False时,会阻塞当前线程的执行;_flag = True时,当前线程会继续执行。 Event内部还定义了如下方法来操纵标
阅读全文
摘要:我们通常使用的python解释器均为CPython,当年python的创始人在设计这门语言时,在解释器中加入了一个叫做“全局解释器锁”(global interpreter lock)的东西。因为GIL的存在,python在运行多线程程序时并不是真正意义上的多线程。 CPython解释器在执行代码时
阅读全文
摘要:同步锁又称互斥锁,可以让线程同时访问共享数据,但这也会造成死锁问题。 死锁的产生 两个线程在执行过程中,都在等待对方先释放占用的资源,从而使程序无法继续进行下去,造成假死状态。这就好比两个人进行交易,一个人卖货,一个人出钱,卖货的要求对方先给钱,我才出货;而出钱的要求对方先出货,我才付钱。这样双方僵
阅读全文
摘要:一个进程包含:运行进程的程序、数据集以及进程控制块。其中进程控制块是保证系统可以进行多任务并发的关键,它控制着进程间的切换活动。 进程是系统中最小的资源分配单位,而线程是系统中最小的执行单位。多个线程可以共享同一个进程内的数据集,很多情况下,线程访问数据集的速度过快,而数据集的更新却跟不上被访问的速
阅读全文
摘要:可以通过继承threading.Thread类的方式来自定义线程类,该类必须复写run方法,将线程运行的目标函数定义在run方法内。 import threading import time class MyThread(threading.Thread): def __init__(self,se
阅读全文
摘要:setDaemon方法必须在start方法前定义。t1.setDaemon(True),该语句的意思是:将主线程A设置为子线程t1的守护线程。也就是在执行程序时,t1会随着主线程A的退出而退出,不论t1是否执行完毕。 例1:当我们在程序中设置一个子线程并将其设为被守护线程时,那么该子线程会随着主线程
阅读全文
摘要:join方法的作用是同步线程。 1、不使用join方法:当设置多个线程时,在一般情况下(无守护线程,setDeamon=False),多个线程同时启动,主线程执行完,会等待其他子线程执行完,程序才会退出。 def print_number(num): print(" > %d" % num, tim
阅读全文
摘要:可以通过实例化一个threading.Thread()对象来创建子线程。 import threading import time def listen_music(num): print(" > %d" % num) print("begin to listen music at ", time.
阅读全文
|