摘要:
一、队列 这三种队列都是线程安全的,不会出现多个线程抢占同一个资源或数据的情况 1 import queue #不需要通过threading模块里面导入,直接import queue就可以了,这是python自带的 2 q=queue.Queue() 3 q.put('first') 4 q.put 阅读全文
摘要:
一、定义 如果程序中的其 他线程需要通过判断某个线程的状态来确定自己下一步的操作,这时线程同步问题就会变得非常棘手。为了解决这些问题,我们需要使用threading库中的Event对象。 事件的方法: 1 event = Event() # 默认状态为False 2 event.isSet() # 阅读全文
摘要:
一、守护线程 1. 对主进程来说,运行完毕指的是主进程代码运行完毕 2. 对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕 详解: <1>主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进 阅读全文
摘要:
一、数据共享 多个线程内部有自己的数据栈,数据不共享;全局变量在多个线程之间是共享的。 1 # 线程数据共享不安全加锁 2 3 import time 4 from threading import Thread, Lock 5 6 7 num = 100 8 9 def func(t_lock): 阅读全文
摘要:
一、Threading模块 1、线程的创建 - 方式一 1 from threading import Thread 2 import time 3 4 def sayhi(name): 5 time.sleep(2) 6 print('%s say hello' % name) 7 8 if __ 阅读全文
摘要:
一、什么是线程 1、定义 指的是一条流水线的工作过程,一个进程内至少自带一个线程,其实进程根本不能执行,进程不是执行单位,是分配资源的单位。线程是执行的单位。进程只是用来把资源集中到一起(进程只是一个资源单 位,或者说资源集合),而线程才是cpu上的执行单位。 我们的py文件在执行的时候,如果你站在 阅读全文
摘要:
一、为什么引入进程池 在程序实际处理问题过程中,忙时会有成千上万的任务需要被执行,闲时可能只有零星任务。那么在成千上万个任务需要被执行的时候,我们就需要去创建成千上万个进程么?首先,创建进程需要消耗时间,销毁进程(空间,变量,文件信息等等的内容)也需要消耗时间。第二即便开启了成千上万的进程,操作系统 阅读全文
摘要:
一、引入 展望未来,基于消息传递的并发编程是大势所趋;即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合。通过消息队列交换数据。这样极大地减少了对使用锁定和其他同步手段的需求,还可以扩展到分布式系统中。 进程间应该尽量避免通信,即便需要通信,也应该选择进程安全的工具来避免加锁带来的问题,应该 阅读全文
摘要:
一、创建管道的类 1、管道的基本参数 Pipe([duplex]):在进程之间创建一条管道,并返回元组(conn1,conn2),其中conn1,conn2表示管道两端的连接对象,强调一点:必须在产生Process对象之前产生管道 参数介绍: dumplex:默认管道是全双工的,如果将duplex射 阅读全文
摘要:
一、生产者消费者模型 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入 阅读全文