Python提高
二十七º
嘿咻嘿咻!
展开
-
ThreadLocal
我们知道,多线程编程中的多个线程共享所属进程的全局变量,这虽然更有利于线程间的通信,但这样对线程安全又造成了极大的威胁,为了保护数据的完整性和独立性,Python引入了线程同步机制,即通过互斥锁、条件变量等来控制对全局变量的访问。但仅仅有全局变量似乎并不太够,有时我们希望Python的每个线程都能够具有自己的私有数据,这些数据对其它线程不可见,只供自己使用,那么该怎么办呢?怎么办?Pyt...原创 2019-08-23 18:48:54 · 128 阅读 · 0 评论 -
Python与正则表达式
一、初始在编程中,字符串往往是我们用到的最多的一类数据结构,但有时十分复杂的字符串处理起来往往十分令人头疼,为了更好的实现对高级文本进行匹配、抽取、搜索、替换等功能,正则表达式(简称为regex)应运而生;什么是正则表达式呢?简单的说,正则表达式是一些由字符和特殊符号组成的字符串,它们描述了一种模式或者多种模式或者仅仅是用来表述几个字符;那么肯定又有人问了,什么是模式?模式是用来匹配字符...原创 2019-08-13 09:41:37 · 331 阅读 · 0 评论 -
正则表达式(补)
这一篇主要是上一篇没提到的一些知识点的补充说明:1、贪婪匹配:上一篇已经介绍过正则表达式中的闭包操作符基础,当模式匹配使用这些操作符时,它将试图尽可能多的匹配字符,这通常被叫做贪婪匹配。怎么理解呢?举个例子看一看:import res = '<h1>Hello,World.</h1>'print(re.search('<.*>',s).group())...原创 2019-08-13 13:42:28 · 825 阅读 · 0 评论 -
Python choices()函数详解、random模块下的常用函数
random模块下的方法详解:1.random.random()随机生成一个[0,1)之间的浮点数。2.random.randint(a,b)随机生成[a,b]范围内一个整数。3.random.randrange(a,b,step)不指定step,随机生成[a,b)范围内一个整数。指定step,step作为步长会进一步限制[a,b)的范围,比如randrange(0,11...原创 2019-08-14 11:15:10 · 95511 阅读 · 9 评论 -
Python实现多进程的方法(详细)
Python使用multiprocessing模块来实现在Windows上跨平台的多进程支持。(在Unix/Linux操作系统上Python提供了一个fork()函数用来创建子进程,但在Windows系统上无法使用)multiprocessing在multiprocessing模块中有一个Process类,Python用它来创建进程。1.Process类的参数:Process(self,...原创 2019-08-17 14:24:39 · 11207 阅读 · 5 评论 -
Python利用Queue、Pipe实现进程间通信
多个进程之间肯定是要能够互相通信的,Python为进程通信提供了许多机制,我们以multiprocessing模块下的Queue和Pipe为例。QueueQueue是多进程安全队列,使用Queue可以实现多进程之间的数据传递。1.Queue的常用方法Queue.get(block=True,timeout) 1)获取队列的一条消息,然后将该消息自队列中移除。参数block默认为True...原创 2019-08-18 12:00:12 · 924 阅读 · 0 评论 -
Python 三种方法创建线程
当需要处理多任务时,多线程编程比起多进程编程往往更有优势,每一个进程都至少有一个线程,一个进程多个线程就可以实现多个任务。线程是操作系统直接支持的执行单元。许多高级语言都支持多线程编程,Python也提供了多个模块支持多线程编程,包括_thread、threading、Queue等模块。而想要创建一个线程,则需要用到其中的_thread、或者threading模块。创建线程Python标准库...原创 2019-08-19 11:40:39 · 3614 阅读 · 0 评论 -
Python 线程的五种状态、守护线程
一、线程的五种状态大多数线程的生命周期经历有 新建、就绪、运行、阻塞、死亡 这五种状态,对于多线程来说,一个线程不可能始终霸占着CPU,CPU需要在不同线程之间切换,于是线程的状态也会随之改变。1.新建当一个线程被创建后,该线程首先会处于新建状态,此时的线程对象并不会表现出任何线程的动态特征,程序也不会执行线程执行体。2.就绪当调用线程对象的start()方法后,该线程处于就绪状态,至于...原创 2019-08-20 11:07:49 · 4161 阅读 · 0 评论 -
Python 线程安全、RLock与Lock的区别
众所周知,多线程中的所有数据全部是由所有线程共享的,在这一点上它和多进程有很大的不同,多进程的内存空间相互独立,互不影响,即使是同一个变量,在多个进程中存储的也是它的拷贝,但多线程却与之相反,这样虽然也有好处,但却也存在着安全隐患。我们先看一个例子:示例:import threadingresult = 100def text(n): global result for i...原创 2019-08-20 20:39:16 · 1011 阅读 · 0 评论 -
详细说明Python中的Condition类
互斥锁Lock和RLock只能提供简单的加锁和释放锁等功能,它们的主要作用是在多线程访问共享数据时,保护共享数据,防止数据被脏读脏写,保证数据和关键代码的完整性。在此基础上,Python提供了Condition类,Condition类不仅自身依赖于Lock和RLock,即具有它们的阻塞特性,此外还提供了一些有利于线程通信,以及解决复杂线程同步问题的方法,它也被称作了条件变量。一、Conditio...原创 2019-08-21 12:19:39 · 10702 阅读 · 4 评论 -
Python Event类(threading模块下)介绍
Event是threading模块下一个简单的类,主要用于线程间通信。Event本身管理一个信号标志,信号标志为真时,线程被唤醒,信号标志为假时,通常搭配wait()方法阻塞线程。Evevt类提供的方法:is_set() :该方法返回Event的信号标志是否为True。set() :将信号标志设置为True,并唤醒所有处于等待状态的线程。clear() :将信号标志设置为False,通...原创 2019-08-22 10:56:58 · 2515 阅读 · 0 评论 -
Python线程池
为什么要使用线程池:1.系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互。线程池因为其内线程可以反复利用的特性,能够很好地提高性能,尤其当程序需要创建大量生命周期很短的线程时。2.一味因为任务数量的增加而增加线程数量,最终会导致线程数量的失控,不仅系统性能会因此急剧下降,甚至会导致Python解释器崩溃。而线程池可以有效地控制系统中并发线程的数量。如何创建线程池:创建线程池可...原创 2019-08-22 15:41:26 · 223 阅读 · 0 评论 -
Python time模块详解
Python中内置的time模块主要包含许多提供日期、时间功能的类与函数,如果程序要与时间打交道,有时就会用到该模块。time模块中表现时间的格式主要有以下几种:timestamp(时间戳):表示从格林威治时间1970年01月01日0时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的偏移量(单位:s)。struct_time(时间元组):表示一个详细准确的日期...原创 2019-08-24 17:24:21 · 630 阅读 · 0 评论 -
Python Timer定时器
Timer是在threading模块下的、Thread类的派生类,它用于在指定时间后调用一个方法。Timer的构造方法:Timer(interval,func,args,kwargs)interval:用于设置等待时间。func:要执行的函数或方法。args/kwargs:该函数或方法要用到的位置参数或关键字参数。实例化Timer,即创建了一个定时器,Timer指向的方法会在指定...原创 2019-08-23 21:04:17 · 18551 阅读 · 0 评论 -
datetime 模块
datetime模块有多个类,其中date类与time类分别用来表示日期和时间,datetime模块下还有个datetime类,它是date类与time类的结合版本。一、date类1.date对象的组成date(year,month,day)访问date属性:from datetime import dated = date(2019,8,31)print(d.today())...原创 2019-08-31 20:29:04 · 404 阅读 · 0 评论