Python之并行编程笔记

概述:

       非并发: 1 程序由单个步骤序列构成  2 包含独立子任务的程序执行性能低

        并发:  1 异步、高效  2 分解子任务、简化流程与逻辑

         进程process:1 一个程序的执行实例  2 每个进程有自己的地址空间、内存、数据栈及辅助数据

        线程 thread: 1 同一进程内,可被并行激活的控制流  2 共享相同上下文(空间地址、数据结构)

                              特点 1 便于信息共享和通信  2线程访问顺序差异会导致结果不一致(条件 race condition)

         Python GIL 全局解释器锁:Global  Interpreter Lock

                                                    Python 代码由虚拟机(解释器主循环)控制

                                                    主循环同时只能有一个控制线程执行

多线程

       _thread  Python已经不推荐使用

                 特点:  没有控制进程结束机制、只有一个同步原语(锁)、功能少于threading模块

                            .start_new_thread(function,args, **kwargs=None) 开始线程

       threading 模块

                .Thread 线程  构造:.Thread(target=目标函数,args=(参数,))

                                                 自定义Thread派生类,重写run方法逻辑

                                  .start()  启动线程

                                  .join()  要求主线程等待

                                 .name  线程名称

                .current_thread()  获取当前线程

                同步原语:锁(效率不是很高,需要一定的逻辑加锁)

队列:

     queue模块  Queue FIFO:.Queue(maxsize=0) 构造实例

                                              .put(item, block=True, timeout=None)  放入数据项

                                              .get(block=True, timeout=None)  获取数据项

                                              .task_done()  声明当前队列任务处理完毕

                                              .join()  队列所有项处理完毕前阻塞

                       LifoQueue LIFO

                       PriorityQeue 优先级队列

multiprocessing模块   充分运用多核、多CPU的计算能力,适用于计算密集型任务

concurrent.futures 模块   ThreadPoolExecutor、ProcessPoolExecutor

原文地址:https://www.cnblogs.com/yang901112/p/11342892.html