摘要:队列的类型和常用方法 队列是一种数据结构,它类似于列表。但列表是线程不安全的,而队列是线程安全的。 python的queue(python3,python2为Queue)提供了3种队列: Queue:先进先出型(First In First Out)。 LifoQueue:后进先出型(Last In
阅读全文
随笔分类 - Python
摘要:队列的类型和常用方法 队列是一种数据结构,它类似于列表。但列表是线程不安全的,而队列是线程安全的。 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.
阅读全文
摘要:python函数(二) 变量的作用域 1、局部变量与全局变量 在函数内创建的变量被称为局部变量,这类变量的生命周期与函数相同,当函数执行完毕时,变量也就随之消失。 此类变量只能在函数内部调用,函数外不能调用该变量。 打印结果: 全局变量是定义在函数之外的变量,该函数在函数内外都可以调用。 全局变量作
阅读全文
摘要:python函数(一) 1、函数的定义: 定义一个函数,有3个部分需要注意: 1. 函数名称。函数的命名规范与变量类似:不能以数字开头、不能包含非法字符、不能包含空格,以及不要使用python的保留字; 2. 函数的参数。名称后的括号内是函数的参数,这种参数属于形式参数,也就是作为传递用的参数。参数
阅读全文
摘要:python基本数据类型之集合 集合是一种容器,用来存放不同元素。 集合有3大特点: 1. 集合的元素必须是不可变类型(字符串、数字、元组); 2. 集合中的元素不能重复; 3. 集合是无序的。 在集合中直接存入list或字典类型会直接报错;在创建集合时,重复元素会被剔除;集合是无序的,即集合中的元
阅读全文
摘要:python基本数据类型之字典 python中的字典是以键(key)值(value)对的形式储存数据,基本形式如下: 整个字典用大括号表示,键值之间使用':'来连接。 字典的内置方法有:clear、copy、fromkeys、get、items、keys、pop、popitem、setdefault
阅读全文
摘要:python基本数据类型之列表与元组 python中list与tuple都是可以遍历类型。不同的是,list是可以修改的,而元组属于不可变类型,不能修改。 列表和元组中的元素可以是任意类型,并且同一个列表和元组中可以包含多种类型的元素。 list中有很多内置方法,元组由于不能修改,所以只有两个方法(
阅读全文
摘要:python基本数据类型之数字与浮点型 在python3中,整数的数据类型为int,而浮点数的数据类型为float。python2中整数可以是int和long(长整型)两种类型,python3只保留了int,去除了long。 整型 int也属于不可变类型,即int类型的变量一旦在内存中被创建就无法改
阅读全文
摘要:python基本数据类型之字符串(五) 遍历与查找 python中的字符串属于可迭代对象,通过一些方法可以遍历字符串中的每一个字符。而查找的方法主要有两个:find与index。 1、字符串的遍历 字符串的遍历可以使用for循环。 打印结果: 既然字符串可以被遍历,那么它应该是有长度的。获取字符串长
阅读全文
摘要:python基本数据类型之字符串(四) 判断方法 python中有一类用来判断字符串形式的方法,该类方法有两个特点:(1)方法名都是is开头(除了startswith和endswith);(2)返回值都是bool类型(True\False)。 方法包括:startswith\endswith、isa
阅读全文
摘要:python基本数据类型之字符串(三) 转换和判断方法 在python中,有一些内置方法可以将字符串转化特定形式,而与之对应的一些方法可以判断字符串是否符合某些形式。因此,在这篇文章中,笔者把转换方法和相应的判断方法放在一起进行讲解。 这些方法包括:capitalize、casefold、lower
阅读全文
摘要:python基本数据类型之字符串(二) 替换方法 python中字符串的替换方法主要有:center、rjust\ljust、expandtabs、format\format_map(格式化)、strip、rstrip\lstrip、replace和zfill。其中最重要的两个方法是replace和
阅读全文
|