background
进程间通信方式又称IPC,可以分为控制信息的通信(如semophore、signal)和数据信息的通信(如pipe、message queue、shared memory、socket)。IPC通常由操作系统完成。
同一进程的线程共享全局变量和内存,所以线程间通信简单。操作系统的最小调度单位是线程,线程的花费也小得多。但线程为了保护共享变量,需要做好同步/互斥。线程间的同步方式有临界区、互斥锁、信号量。
由Python有GIL的存在,多线程只适用于IO密集型程序。
Python有很多异步的library,如multiprocessing、threading、gevent。
使用threading,with和threading.Condition()可以很容易的实现临界区。
1 | with condition: |
Queue
Python提供了三种异步队列:Queue、LifoQueue、PriorityQueue。他们都是线程安全的。maxsize参数提供大小限制,PriorityQueue是优先队列,通常的入队对象格式是(priority_number, data)。
两个异常Queue.Empty和Queue.Full,会在get_nowait和put_nowait抛出。
Queue对象的方法使用也十分简单。qsize、empty、full返回队列的状态。提供同步和异步的get、put。task_done和join可以控制线程退出。
生产者消费者模式
1 | import Queue |
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏
扫描二维码,分享此文章