一、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)

    

    

python基础25 -----python高级用法的更多相关文章

  1. 二十五. Python基础(25)--模块和包

    二十五. Python基础(25)--模块和包 ● 知识框架   ● 模块的属性__name__ # my_module.py   def fun1():     print("Hello& ...

  2. 二十一. Python基础(21)--Python基础(21)

    二十一. Python基础(21)--Python基础(21) 1 ● 类的命名空间 #对于类的静态属性:     #类.属性: 调用的就是类中的属性     #对象.属性: 先从自己的内存空间里找名 ...

  3. Python装饰器的高级用法(翻译)

    原文地址 https://www.codementor.io/python/tutorial/advanced-use-python-decorators-class-function 介绍 我写这篇 ...

  4. Python面试常用的高级用法,怎么动态创建类?

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第16篇文章,今天我们来聊聊Python当中的元类. 元类是Python当中的高级用法,如果你之前从来没见过这个术语 ...

  5. Python函数装饰器高级用法

    在了解了Python函数装饰器基础知识和闭包之后,开始正式学习函数装饰器. 典型的函数装饰器 以下示例定义了一个装饰器,输出函数的运行时间: 函数装饰器和闭包紧密结合,入参func代表被装饰函数,通过 ...

  6. Python之Requests的高级用法

    # 高级用法 本篇文档涵盖了Requests的一些更加高级的特性. ## 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个Session实例发出的所有请求之间保持cookies. 会话对象 ...

  7. python接口自动化 - Requests-3 高级用法

    高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...

  8. Python的 5 种高级用法,效率提升没毛病!

    任何编程语言的高级特征通常都是通过大量的使用经验才发现的.比如你在编写一个复杂的项目,并在 stackoverflow 上寻找某个问题的答案.然后你突然发现了一个非常优雅的解决方案,它使用了你从不知道 ...

  9. Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程

    [保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...

随机推荐

  1. [JavaSecurity] - AES Encryption

    1. AES Algorithm The Advanced Encryption Standard (AES), also as known as Rijndael (its original nam ...

  2. 树莓派学习笔记——apt方式安装opencv

    0.前言     本文介绍怎样在树莓派中通过apt方式安装opencv.并通过一个简单的样例说明怎样使用opencv. 相比于源码方式安装opencv,通过apt方式安装过程步骤简单些,消耗的时间也少 ...

  3. WebLogic配置自己定义密钥库和SSL的操作手冊

    WebLogic配置自己定义密钥库和SSL的操作手冊 (定制标识和定制信任&Keytool&TLS1.0) 1.启用SSLport 保存.重新启动受管Server watermark/ ...

  4. PHP编译选项

    PHP安装 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/u ...

  5. Import语句

    在Java中,如果给出一个完整的限定名,包括包名.类名,那么Java编译器就可以很容易地定位到源代码或者类.Import语句就是用来提供一个合理的路径,使得编译器可以找到某个类. 例如,下面的命令行将 ...

  6. fabric 自动化部署

    fabric 项目发布和运维的工作相当机械,频率还蛮高,导致时间浪费在敲大量重复的命令上. 修复bug什么的,测试,提交版本库(2分钟),ssh到测试环境pull部署(2分钟),rsync到线上机器A ...

  7. virtualbox 虚拟机硬盘扩容

    转自: http://jingyan.baidu.com/article/425e69e6aeede8be14fc1675.html

  8. oracle密码过期解决方法

    Oracle提示错误消息ORA-28001: the password has expired 在oracle服务器上用sqlplus / as sysdba登录进去,可以通过下面的sql语句查看账户 ...

  9. Unity3D学习笔记——游戏组件之Mesh(网格组件)

    Mesh:网格组件.主要用于设置外形和外表. Mesh Filter:网格过滤器.就是为游戏对象添加一个外形. 例:设置外形为Sphere  如果获取的网格拥有蒙皮信患,Unity将自动创建一个skn ...

  10. android-support-v7使用

    前言:android-support-v7与v4相对,还是有很大不同的,首先v7中分为的3个JAR包,其次v7中提供的一些布局资源,所以在使用的时候,需要将v7的源码项目导入,作为lib项目来添加到你 ...