摘要: 1、队列模块简介 队列是一种数据结构,用于存放数据,类似列表。它是先进先出模式(FIFO模式),类似管道一般; 单线程不需要用到队列Queue,它主要用在多线程之间的,Queue称为多线程利器。 列表在多线程共享资源的话,与queue队列比较,主要表现为列表在多线程中,数据不安全。多个线程到列表中拿 阅读全文
posted @ 2018-11-06 17:09 老π 阅读(910) 评论(0) 推荐(0) 编辑
摘要: 条件同步和条件变量(condition)同步差不多意思,只是少了锁功能,因为条件同步设计于不访问共享资源的条件环境。 event围绕一个标志位在搞。 event=threading.Event():条件环境对象,初始值 为False;event.isSet():返回event的状态值;event.w 阅读全文
posted @ 2018-11-06 16:48 老π 阅读(1079) 评论(2) 推荐(0) 编辑
摘要: 条件变量(Condition)也是一把锁,除了同步锁的作用外,还具有在线程间通信的功能。 有一类线程需要满足条件之后才能够继续执行,Python提供了threading.Condition 对象用于条件变量线程的支持,它除了能提供RLock()或Lock()的方法外,还提供了 wait()、noti 阅读全文
posted @ 2018-11-06 16:21 老π 阅读(754) 评论(0) 推荐(0) 编辑
摘要: 信号量也是一把锁,用来控制线程并发数的。 BoundedSemaphore或Semaphore管理一个内置的计数 器,每当调用acquire()时-1,调用release()时+1。 计数器不能小于0,当计数器为 0时,acquire()将阻塞线程至同步锁定状态,直到其他线程调用release()。 阅读全文
posted @ 2018-11-06 15:45 老π 阅读(3432) 评论(0) 推荐(0) 编辑
摘要: 死锁现象就是出现了互相等待解锁,最后程序停下来不走了的现象。 二、通过使用“递归锁RLock”解决上述死锁问题 为了支持在同一线程中多次请求同一资源,python提供了“可重入锁”:threading.RLock。RLock内部维护着一个Lock和一个counter变量,counter记录了acqu 阅读全文
posted @ 2018-11-06 14:59 老π 阅读(644) 评论(0) 推荐(0) 编辑
摘要: 一、先用一个例子说明没有用锁的时候,达到的效果错误: 1、实例(没有锁的情况): 执行效果: python执行流程: 二、在资源上加锁(达到目的) 1、实例代码: 2、执行结果: 阅读全文
posted @ 2018-11-06 14:05 老π 阅读(540) 评论(0) 推荐(1) 编辑
摘要: 1、setDaemon(True): 将线程声明为守护线程,必须在start() 方法调用之前设置, 如果不设置为守护线程程序会被无限挂起。这个方法基本和join是相反的。当我们 在程序运行中,执行一个主线程,如果主线程又创建一个子线程,主线程和子线程 就分兵两路,分别运行,那么当主线程完成想退出时 阅读全文
posted @ 2018-11-05 11:46 老π 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 从Thread类继承 通过继承Thread来实现多线程可以提高对线程任务的个性化定制,具体实现如下: 实例代码: 实例代码2:(更简单些) 阅读全文
posted @ 2018-11-01 16:26 老π 阅读(1671) 评论(0) 推荐(0) 编辑
摘要: Thread类与线程对象 Thread类构造方法的target关键字参数不仅可以是函数,还可以是一个对象,可以称这个对象为线程对象。其实,线程调用的仍然是函数,只是这个函数用对象进行了封装。这么做的好处是可以将线程函数相关的代码都放在这个对象对应的类中,更能体现面向对象的封装性。 线程对象对应的类需 阅读全文
posted @ 2018-11-01 16:25 老π 阅读(555) 评论(0) 推荐(0) 编辑
摘要: Thread类与线程函数 可以使用Thread对象的join方法等待线程执行完毕;主线程(main()函数)中调用Thread对象的join方法,并且Thread对象的线程函数没有执行完毕,主线程会处于阻塞状态。使用Thread类实现多线程的步骤:1、创建Thread类的实例;2、通过Thread类 阅读全文
posted @ 2018-11-01 16:22 老π 阅读(473) 评论(0) 推荐(0) 编辑