Python 多线程与多进程精讲 前言诸多脚本一般都原本是单线程去执行的, 要是任务量繁多起来之时, 像进行批量的文件下载操作, 或者是批量地发出接口请求, 以及处理很大体量的数据这种情况, 单线程就会显得极为缓慢, 处于这一时刻能够去运用多线程或者多进程, 实现多个不一样的任务彼此之间同步施行开展, 缩减整体的等待时长, 进而提升程序的运行效率。用通俗易懂的方式, 对多线程和多进程的基本用法进行了讲解, 借以对写出更高效代码的新手予以帮助。一、为什么需要并发有些任务, 其本身是颇为耗时的, 像是网络请求, 还有文件下载, 以及数据库查询, 另外还有大量计算。要是一个任务完成之后才去执行下一个, 那么总的时间将会是很长的。使用并发可以让多个任务同时处理从而缩短整体运行时间。二、多线程线程众多的情形下适合负责处理那类输入输出较为密集的任务, 像是网络方面的请求, 文件的读取与写入, 数据库的相关查询。示例代码import threading import time def task(name): print(f开始任务{name}) time.sleep(2) print(f结束任务{name}) t1 threading.Thread(targettask, args(A,)) t2 threading.Thread(targettask, args(B,)) t1.start() t2.start() t1.join() t2.join()其中三、线程池要是任务数量呈现出诸多的状况, 依靠手动去创建数量众多的线程这种方式是不太便利的。能够运用线程池来进行统一的线程管理。示例代码from concurrent.futures import ThreadPoolExecutor def task(name): print(f处理任务{name}) return name with ThreadPoolExecutor(max_workers3) as executor: result executor.map(task, [A, B, C]) print(list(result))表示同时最多执行多少个线程任务。四、多进程比如大量的相关运算, 还有相关数据的处理, 以及模型的训练等等, 多进程的运用才更适宜那种处于CPU密集状况下的任务。示例代码import multiprocessing import time def task(name): print(f进程任务{name}) time.sleep(2) print(f进程结束{name}) if __name__ __main__: p1 multiprocessing.Process(targettask, args(A,)) p2 multiprocessing.Process(targettask, args(B,)) p1.start() p2.start() p1.join() p2.join()多进程的书写方式与会多线程的情形相类似, 然而需要留意的是, 在相应特定环境状况之下, 多进程的代码一般而言是需要安置于if name main: 这样的条件语句范围之内的。五、线程和进程怎么选如果任务主要是等待网络、文件、数据库优先用多线程。如果任务主要是大量计算优先用多进程。简单理解六、并发不是越多越好要知道, 线程或者进程的数量并非是越多便越好这一情况, 要是数量过多的话, 系统需耗费大量的时间去调度任务, 反而其速度就有可能会变慢。真实进行开发期间, 得依据任务的类型, 以及服务器所拥有的资源, 还有接口限定的条件, 去恰当地设定并发的数量。结尾能使批量任务运行得更快的多线程, 以及可让网络请求、数据处理等场景运行得更快的多进程, 对于性能优化而言是很重要的手段, 但即便是并发, 其使用也需要合理, 要避免盲目增加线程数致使程序不稳定的情况发生。