【Python】一分钟就能学会的多进程并发处理mutliprocessing

简介: 【Python】一分钟就能学会的多进程并发处理mutliprocessing

前言        


       Tab:python中的多进程运行,速度能提高三倍左右,而且很简单,非常适合食用。


便于理解的方式:


   multiprocessing用于opencv播放视频,同时实现播放(或者说处理)多个视频。


1dc618a0ed9580ce8bfa6facb208c08f.png


加速前后耗时对比:


12.407seconds VS 4.519seconds


multiprocessing.Pool示例


from multiprocessing import Process, Pool, Lock
import time
def show(param1, param2, param3):
    print('I am the process:{}'.format(param1))
    time.sleep(1)
    print('This my param2:{}'.format(param2))
    time.sleep(2)
    print('This is my parm3:{}'.format(param3))
def do(params):
    return show(params[0], params[1], params[2])
if __name__ == '__main__':
    # ---multiprocessing---
    START_TIME = time.time()
    pool_count = 3
    pool = Pool(pool_count)  # 创建拥有n个进程数量的进程池
    params = []
    for i in range(1,pool_count+1):
        params.append([i, i*10, i*100])
    pool.map(do, params)  # map(func, iterable[, chunksize=None])
    pool.close()  # 关闭进程池(pool),使其不再接受新的任务
    pool.join()  # 主进程阻塞等待子进程的退出, join方法要在close或terminate之后使用
    print("计算耗时>>>{:.3f}s".format(time.time() - START_TIME))


       想要快速实现自己代码的多进程运行,重点把握自己的pool.map(do, param),如上所示,do就是你的函数,因为map只接收一个参数,因此如果有多个参数时,需要再写个函数把之前的函数包装一层(eg:我的main_weight有两个参数,我写了个do将其包装为一个函数)。之后就按照示例上的将所有数据append到一个列表param中,后面再跟pool.close()和pool.join()就OK了!!!


5d4c6812c8535adbb050f4ddf2e1bce8.png


       毫无疑问,这几个句子是同时出现的,而不是一条一条出现的,也就是说第一秒出现了前三行,之后才出现中间三行,最后出现最后三行。


完毕!


如果大家觉得有用的话,欢迎点赞+关注哦!


番外阅读:


multiprocessing包是Python中的多进程管理包。

与threading.Thread类似,它可以利用multiprocessing.Process对象来创建一个进程。

该进程可以运行在Python程序内部编写的函数。

该Process对象与Thread对象的用法相同,也有start(), run(), join()的方法。

此外multiprocessing包中也有Lock/Event/Semaphore/Condition类 (这些对象可以像多线程那样,通过参数传递给各个进程),用以同步进程,其用法与threading包中的同名类一致。

所以,multiprocessing的很大一部份与threading使用同一套API,只不过换到了多进程的情境。


但在使用这些共享API的时候,我们要注意以下几点:


在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie)。所以,有必要对每个Process对象调用join()方法 (实际上等同于wait)。对于多线程来说,由于只有一个进程,所以不存在此必要性。

multiprocessing提供了threading包中没有的IPC(比如Pipe和Queue),效率上更高。应优先考虑Pipe和Queue,避免使用Lock/Event/Semaphore/Condition等同步方式 (因为它们占据的不是用户进程的资源)。

多进程应该避免共享资源。在多线程中,我们可以比较容易地共享资源,比如使用全局变量或者传递参数。在多进程情况下,由于每个进程有自己独立的内存空间,以上方法并不合适。此时我们可以通过共享内存和Manager的方法来共享资源。但这样做提高了程序的复杂度,并因为同步的需要而降低了程序的效率。


相关文章
|
3月前
|
监控 并行计算 数据处理
构建高效Python应用:并发与异步编程的实战秘籍,IO与CPU密集型任务一网打尽!
在Python编程的征途中,面对日益增长的性能需求,如何构建高效的应用成为了每位开发者必须面对的课题。并发与异步编程作为提升程序性能的两大法宝,在处理IO密集型与CPU密集型任务时展现出了巨大的潜力。今天,我们将深入探讨这些技术的最佳实践,助你打造高效Python应用。
50 0
|
2月前
|
并行计算 数据处理 调度
Python中的并发编程:探索多线程与多进程的奥秘####
本文深入探讨了Python中并发编程的两种主要方式——多线程与多进程,通过对比分析它们的工作原理、适用场景及性能差异,揭示了在不同应用需求下如何合理选择并发模型。文章首先简述了并发编程的基本概念,随后详细阐述了Python中多线程与多进程的实现机制,包括GIL(全局解释器锁)对多线程的影响以及多进程的独立内存空间特性。最后,通过实例演示了如何在Python项目中有效利用多线程和多进程提升程序性能。 ####
|
2月前
|
API 数据处理 Python
探秘Python并发新世界:asyncio库,让你的代码并发更优雅!
在Python编程中,随着网络应用和数据处理需求的增长,并发编程变得愈发重要。asyncio库作为Python 3.4及以上版本的标准库,以其简洁的API和强大的异步编程能力,成为提升性能和优化资源利用的关键工具。本文介绍了asyncio的基本概念、异步函数的定义与使用、并发控制和资源管理等核心功能,通过具体示例展示了如何高效地编写并发代码。
48 2
|
2月前
|
数据库 开发者 Python
“Python异步编程革命:如何从编程新手蜕变为并发大师,掌握未来技术的制胜法宝”
【10月更文挑战第25天】介绍了Python异步编程的基础和高级技巧。文章从同步与异步编程的区别入手,逐步讲解了如何使用`asyncio`库和`async`/`await`关键字进行异步编程。通过对比传统多线程,展示了异步编程在I/O密集型任务中的优势,并提供了最佳实践建议。
24 1
|
2月前
|
调度 iOS开发 MacOS
python多进程一文够了!!!
本文介绍了高效编程中的多任务原理及其在Python中的实现。主要内容包括多任务的概念、单核和多核CPU的多任务实现、并发与并行的区别、多任务的实现方式(多进程、多线程、协程等)。详细讲解了进程的概念、使用方法、全局变量在多个子进程中的共享问题、启动大量子进程的方法、进程间通信(队列、字典、列表共享)、生产者消费者模型的实现,以及一个实际案例——抓取斗图网站的图片。通过这些内容,读者可以深入理解多任务编程的原理和实践技巧。
113 1
|
3月前
|
Python
Python中的多线程与多进程
本文将探讨Python中多线程和多进程的基本概念、使用场景以及实现方式。通过对比分析,我们将了解何时使用多线程或多进程更为合适,并提供一些实用的代码示例来帮助读者更好地理解这两种并发编程技术。
|
2月前
|
监控 JavaScript 前端开发
python中的线程和进程(一文带你了解)
欢迎来到瑞雨溪的博客,这里是一位热爱JavaScript和Vue的大一学生分享技术心得的地方。如果你从我的文章中有所收获,欢迎关注我,我将持续更新更多优质内容,你的支持是我前进的动力!🎉🎉🎉
30 0
|
3月前
|
数据挖掘 程序员 调度
探索Python的并发编程:线程与进程的实战应用
【10月更文挑战第4天】 本文深入探讨了Python中实现并发编程的两种主要方式——线程和进程,通过对比分析它们的特点、适用场景以及在实际编程中的应用,为读者提供清晰的指导。同时,文章还介绍了一些高级并发模型如协程,并给出了性能优化的建议。
43 3
|
3月前
|
中间件 API 调度
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用
58 4
|
3月前
|
中间件 API 调度
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用 精选
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用 精选
38 2