ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python中的Process和Pool: 多进程处理的利器

Python中的Process和Pool: 多进程处理的利器 更多学习内容在进行编程期间, 多进程属于一种具备强大功能的并行处理技术, 它能够极为显著地提升程序的性能以及效率。标准库当中的模块给出了两种主要的多进程处理方式, 分别是和Pool。在本文里, 又会进而详细把这两种处理方式的使用方法、特性以及在实际项目之中的应用场景介绍清楚。和Pool的介绍 1、属于模块之内核心类别的那个类, 是用来构建一个独自进程的。每一个对象都有能够去执行一个函数的可能性或是一种方法, 借由这样进而在独自进程当中开展任务。2、 Pool在该模块里, Pool 类属于另外一个关键类, 其作用是去创建出一个进程池, 能够以并行的方式执行多个任务, Pool 类给出了多种办法用以管理进程池里的进程, 像 apply(), map(), ()等。使用示例 1、使用类下面是一个简单的示例展示了如何使用类创建并启动一个进程import multiprocessing import time def worker(name): print(fWorker {name} is starting.) time.sleep(2) print(fWorker {name} is exiting.) if __name__ __main__: p1 multiprocessing.Process(targetworker, args(A,)) p2 multiprocessing.Process(targetworker, args(B,)) p1.start() p2.start() p1.join() p2.join()在这个示例里头, 定义了一个函数, 此函数会于进程当中去执行一些任务。而后创建了两个对象, 这两个对象分别指定了那个函数作为目标函数, 并且还传入了不一样的参数。最终, 借着调用start()方法来启动进程, 而且通过join()方法去等待进程执行完毕。2、 使用Pool类紧接着一个简单的示例, 它呈现出了怎样运用Pool类去创建并且使用进程池。import multiprocessing import time def worker(name): print(fWorker {name} is starting.) time.sleep(2) print(fWorker {name} is exiting.) if __name__ __main__: pool multiprocessing.Pool(processes2) pool.map(worker, [A, B]) pool.close() pool.join()于这个示例里头, 运用Pool类构建了一个进程池, 明确规定最大进程数是2。接着借助map()方法把任务分派给进程池里边的进程去执行。最终经由调用close()方法来关闭进程池, 通过调用join()方法去等待所有进程执行完毕。应用场景 1、 并行计算在面临需开展大规模数据处理或者计算密集型任务之际, 运用多进程能够极为显著地提升程序的运行速度。比如说, 假定存在计算一组数字平方和的需求, 那么能够把该任务分派至多个进程进行并行化计算, 随后再将结果予以汇总。以下是一个简单的示例import multiprocessing def square_sum(numbers): return sum(x ** 2 for x in numbers) if __name__ __main__: numbers [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] num_processes 4 pool multiprocessing.Pool(processesnum_processes) chunk_size len(numbers) // num_processes chunks [numbers[i:ichunk_size] for i in range(0, len(numbers), chunk_size)] results pool.map(square_sum, chunks) total_sum sum(results) print(Total square sum:, total_sum) pool.close() pool.join()在此示例里, 把数字列表划分成了4个子列表, 随后运用进程池对每个子列表的平方和进行并行计算, 最终将结果汇总从而得到总的平方和。如此一来能够极大地加快计算速度, 尤其是在数据规模非常大的时候。2、 IO密集型任务在那种要进行大批数量 IO 操作的任务范围里, 就好像是文件的读取还有写入, 以及网络方面的请求这类情况之下, 运用多进程这种方式是能够防止 IO 出现阻塞状况的, 由此能够提升程序的响应速度。比如说, 假定存在要同时去下载好多各种不同文件这种需求情况下, 可以把每一个文件相对应的下载任务逐个分配归属于不同的进程然后一起并行着去执行, 进而由此达到提高下载效率的目的。以下是一个简单的示例import multiprocessing import requests def download_file(url, filename): response requests.get(url) with open(filename, wb) as f: f.write(response.content) print(fDownloaded {filename} from {url}) if __name__ __main__: urls [ (https://example.com/file1.txt, file1.txt), (https://example.com/file2.txt, file2.txt), (https://example.com/file3.txt, file3.txt) ] num_processes len(urls) pool multiprocessing.Pool(processesnum_processes) pool.starmap(download_file, urls) pool.close() pool.join()针对该示例而言, 把由需下载的文件URL以及文件名所构成的元组列表传递进()方法之中, 接下去凭借进程池进而并行地去执行下载任务。唯有如此才能够同时对多个文件展开下载操作, 以此提升下载的效率。3 并行任务处理当存在大量彼此相互独立的任务有待处理之际, 能够运用多进程并行地去处理这些任务。比如说, 假定存在一批图片文件需要处理, 比如涉及压缩、调整大小以及加水印等操作, 那么可把每个图片文件的处理任务配给不同的进程并行处理, 以此用来提升处理速度。以下是一个简单的示例import multiprocessing from PIL import Image def process_image(filename): img Image.open(filename) # 进行图片处理操作如压缩、调整大小、加水印等 img.thumbnail((300, 300)) img.save(fprocessed_{filename}) print(fProcessed {filename}) if __name__ __main__: filenames [image1.jpg, image2.jpg, image3.jpg] num_processes len(filenames) pool multiprocessing.Pool(processesnum_processes) pool.map(process_image, filenames) pool.close() pool.join()在这个示例里头, 要把需处理的图片文件名列表传递给map()方法, 之后运用进程池并行开展图片处理任务。如此一来, 就能同时处理多张图片, 进而提升处理速度。总结本文介绍了其中的两种多进程处理方式, 分别是和Pool, 还通过示例代码演示了它们的基本用法, 同时也探讨了多进程在实际项目里的应用场景, 涵盖并行计算、IO密集型任务以及并行任务处理等方面, 多进程处理是其中一种强大的并行处理技术, 能够提高程序的性能与效率, 尤其是在处理大规模数据或IO密集型任务时有着明显的优势, 希望本文能够帮助大家更好地理解并运用多进程处理技术。要是你觉着文章还算可以, 那就请各位, 进行点赞, 加以分享, 可以留言一下, 毕竟这会成为我持续输出更多质量上乘文章的最为强大的动力倘若存在想要进行系统学习的想法或者有着问题咨询那般的需求, 又或者是萌生了去考虑开展一些工作以外副业的念头, 那么均能够通过扫描二维码这种方式来添加微信。进而经由围观朋友圈的途径一同展开交流以实现学习的目的。悄悄跟大伙透露一句, 添加好友之后, 把备注写成优质资料, 能够另外免费拿到一份价值 99 元的《学习优质资料》, 辅助你更出色地学习。往期推荐基础学习常见的100个问题.pdf附答案100个爬虫常见问题完全版PDF开放下载对于数据结构与算法的学习, 这是我所碰到过的极为友善的教程, 而且有PDF免费下载哦、。办公自动化完全指南(免费PDF)Web 开发常见的100个问题.PDF历时一个月整理的 爬虫学习手册全集PDF免费开放下载
返回列表