走入计算机的第三十七天(python的高级用法)

一、Event

  1、为什么会有Event?

    线程的一个关键特性就是每个线程的运行都是独立运行且状态不可预测。如果程序中的线程需要通过别的线程的状态来判断自己线程中的  某个程序是否需要执行,那么Event就产生了。

  2、Event的作用?

    threading库中Event对象主要是通过判断自己线程中的Event对象来判断是否唤醒所等待这个Event对象的线程,Event对象包含一个可由  线程设置的信号标志,默认情况下该信号标志为假,如果有别的线程等待这个Event对象时,当他为假时那么这些被等待的线程将一直被阻塞  直到Event对象为真时才会继续执行。如果这个信号标志为真了那么别的线程就会忽略它而继续执行程序。

  3、Event的使用方法

    event=threading.Event() #实例化产生一个Event的对象

    event.isSet():                #返回event的状态值;

      event.wait():     #如果 event.isSet()==False将阻塞线程;

      event.set():         #设置event的状态值为True,所有阻塞池的线程激活进入就绪状态, 等待操作系统调度;

    event.clear():     #恢复event的状态值为False,默认情况下就是为Flase。

  4、如图:

    

        线程1                      线程2

      注释:在多个线程中,当有线程1出现Event.wait()时会判断线程2中Event.isSet()的状态,如果为True,线程1继续执行程序,如  果为Flase,线程1会等待线程2中Event.set()状态设置为True后再继续执行程序。

      线程1是否能执行完毕程序依赖于线程2的Event对象是否为真

  5、如图实例:

    

  6、event.wait()方法还支持添加一个超时参数,默认线程会等待event.isSer()为True时才会执行下面代码,但是设置了超时参数后,当线程  等待超过这个时间就会自动执行下面的代码。

二、队列

  1、什么是队列?

    数据进行有序的处理,相当于按照顺序处理数据。

  2、get()和put()方法

    1.get()是发送数据,put()是接收数据,可以在实例化产生对象的时候设置消息队列的长度,即queue.Queue(100).

    2、实例:

    

    注释:该方法是按照先进先出的机制来处理数据的,即先进来的数据现得到处理。

  2、join()和task_done()

    1.如图所示

    

    2.其他用法

      q.qsize() 返回队列的大小 q.empty() 如果队列为空,返回True,反之False

        q.full() 如果队列满了,返回True,反之False

      q.full 与 maxsize 大小对应

      q.get([block[, timeout]]) 获取队列,timeout等待时间

      q.get_nowait() 相当q.get(False)非阻塞
      q.put(item) 写入队列,timeout等待时间

           q.put_nowait(item) 相当q.put(item, False)

      q.task_done() 在完成一项工作之后,

      q.task_done() 函数向任务已经完成的队列发送一个信号

      q.join() 实际上意味着等到队列为空,再执行别的操作

  3、其他模式

    1、Python Queue模块的FIFO队列先进先出。class queue.Queue(maxsize)

    2、LIFO类似于堆,即先进后出。 class queue.LifoQueue(maxsize)

    3、还有一种是优先级队列级别越低越先出来。 class queue.PriorityQueue(maxsize)

时间: 2024-11-07 14:24:09

走入计算机的第三十七天(python的高级用法)的相关文章

走入计算机的第三十八天(python的进程和协成))

一.进程 1.multiprocessing模块实现多进程并发. 1.1multiprocessing包是Python中的多进程管理包,与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程 该进程可以运行在Python程序内部编写的函数,属于父进程和子进程的关系.该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法. 1.2Process类的简绍 构造方法: Process([gro

走入计算机的第三十九天(python终结篇之IO模型)

一.IO模型 1.IO模型分类 1.阻塞IO--------blocking IO 2.非阻塞IO------nonblocking IO 3. 多路复用IO------- multiplexing 4.信号驱动IO-------signal driven IO (工作中不会使用到,只是作为了解) 5.异步IO------- asynchronous IO 2.通常情况下IO默认操作分为两个阶段(默认都是阻塞IO) 1.准备等待数据阶段,相当于请求操作系统是否有数据发送过来(调用IO操作). 2

走入计算机的第三十三天(异常处理和scoket编程)

一 异常处理 1 异常和错误,而错误分成了两种 一是语法错误,这种错误过不了解释器的检测,必须要在执行前改正 二是逻辑错误,在执行的时候检测出了错误. 2 什么是异常:异常就是程序在运行是产生的错误信息. 3 异常的种类 python3中不同的异常分为不同的类型,用不同的类型去标识.不同的类型对象错误都有相对应的标识语法. AssertionErr: 断言语句失败:关键字后边的条件为假的时候,程序将 停止并抛出AssertionError异常,语句一般是在测试程序的时候用于在代码中置入的检查点.

走入计算机的第三十天(继承实现原理和封装)

一 继承的实现原理 1 继承的实现顺序 从左到有依次查找,     每一个分支查找完了才进行下一个分支的查找 在新式类中每个分支属于同一个父类的时候查找的顺序是如下 这种属于广度优先,就是在新式类中,查找从左到右每个分支依次查找完毕过后,最后在查找他们共同的父类. 在经典类中每个分支属于同一个父类的时候查找的顺序是如下 这种属于深度查找,就是在经典类中,从左到右,每个分支查找到底,在进行下一个分支的查找,但是在他们共同父类第一次查找过后,就不会在查找他们共同的父类了. 1 class A(obj

走入计算机的第三十四天(基于tcp和udp的套接字)

一 TCP套接字 1 low版TCP套接字 服务器端 客户端 2.改进版tcp套接字 服务端 客户端 二.UDP的套接字 服务器 客户端 注:udp的套接字可以支持多个客户端同时访问,但tcp套接字就不行了,那是因为tcp套接字有tcp三次握手四次挥手. 三.recv和recvfrom的区别? 1.提前须知: 1.1tcp是send发送消息,recv接收消息. 1.2udp是sendto发送消息,recvfrom接收消息. 1.3 在我眼里看来send只是发送一个数据对象,所以recv接收的也只

走入计算机的第三十一天(多态和绑定方法)

一 多态和多态性 1 什么是多态:多态就是一种失误的多种形态.(例如:水有冰的形态,还有水蒸气的形态等等)一个抽象类有多个子类,因而多态的概念依赖于继承. 序列类型有多种形态:字符串,列表,元组. 动物有多种形态:人,狗,猪 1 import abc 2 class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 3 @abc.abstractmethod 4 def talk(self): 5 pass 6 7 class People(Animal): #动

python自动化测试之函数(匿名函数lambda和三目运算等(高级用法))

''' 匿名函数: lambda ''' def Add(a,b): print(a+b) Add(2,3) per = lambda a,b:a+b print(per(2,3)) ''' 三目运算 ''' a = 20 print("True") if a >10 else print("False") ''' 匿名函数+三目运算 ''' login = lambda username,password:print('登录成功') if username

python+requests——高级用法——处理cookie——重点

参考网址:https://www.cnblogs.com/xiaobaibailongma/p/12346091.html import requests url = 'http://www.baidu.com' resp = requests.get(url) print(resp.cookies) print('============================================================') for k,v in resp.cookies.item

python requests 高级用法 -- 包括SSL 证书错误的解决方案

Session Objects会话对象 Session对象在请求时允许你坚持一定的参数.此外,还坚持由Session实例的所有请求的cookie. 让我们坚持在请求时使用 s = requests.Session() s.get('http://httpbin.org/cookies/set/sessioncookie/123456789') r = s.get("http://httpbin.org/cookies") print r.text # '{"cookies&q