一、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. MII_GMII_RGMII_RMII_SMII_SSMII_TBI_RTBI

    简介 MII是英文Medium Independent Interface的缩写,翻译成中文是“介质独立接口”,该接口一般应用于以太网硬件平台的MAC层和PHY层之间,MII接口的类型有很多,常用的有 ...

  2. Python内置函数之any()

    any()函数和all()函数相对立. 相同点为: any()也只能传入一个参数. any()的参数必须是可迭代对象. 不同点: 可迭代对象中只要有一个元素为True,返回值就是True. 下面看看具 ...

  3. CenOS下安装Memcache和PHP Memcache扩展.

    I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 yum install libevent-devel 2.安装memcac ...

  4. mysql命令 SHOW TABLE STATUS LIKE '%city%'; 查看表的状态可以查看表的创建时间

    show status like '%handler_read_key%'; #走索引的命令的数量. #查看存储引擎 mysql> show variables like '%engine%'; ...

  5. 关于c中volatile关键字

    一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了.精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存 ...

  6. Linux 开机自动挂载分区

    参考:http://linuxso.com/linuxrumen/3658.html 参考:http://www.jb51.net/os/RedHat/213998.html 查看磁盘UUID信息 [ ...

  7. 【翻译自mos文章】当点击完 finishbutton后,dbca 或者dbua hang住

    当点击完 finishbutton后,dbca 或者dbua hang住 来源于: DBCA/DBUA APPEARS TO HANG AFTER CLICKING FINISH BUTTON (文档 ...

  8. Intent跳转系统的应用

    1.从google搜索内容    Intent intent = new Intent();    intent.setAction(Intent.ACTION_WEB_SEARCH);    int ...

  9. 去OpenCVManager,大部分为转载,仅当自己学习使用

    去OpenCVManager方法,可以参考这篇博客http://blog.csdn.net/yanzi1225627/article/details/27863615,可以用,挺好的.我这里只是做个总 ...

  10. 2213 Problem J

    #include <iostream> #include <stdio.h> #include <string.h> #include <algorithm& ...