2020-10-21 学习笔记 Python Multiprocessing 多进程在python中的应用

如何在python实现多进程并发

什么是多进程, 多进程与多线程的区别

进程是cpu资源分配的基本单位。 一个cpu可以运行一个独立的进程。进程之间不共享数据,之间是相互独立。
线程是可供cpu独立调度和分配的比进程更小的单位。一个进程可以有很多线程。 线程之间共享数据。

为什么用多进程

用多进程的本质是为了提高运行效率, 减少运行时间。 因为所有的程序都可以单进程运行, 多进程就是为了能缩短总运行时间。
很多情况下,用线程会增加问题的复杂度。线程需要处理加锁的问题Lock,处理不好的话会降低准确性。
如果处理的任务可以保持独立,多进程是一个很好的选择。能用多进程的地方,就用多进程。

如何用多进程实现并发

调用multiprocessing模块的Pool来做进程管理。这个模块模仿threading的API。
https://docs.python.org/zh-cn/3.7/library/multiprocessing.html
Pool可以自动地将任务分配给空闲的cpu核。如果有任务完成,Pool可以分配新任务给空闲的核。这样调控起来很方便,不用自己再写。

要想做到并发,一定要用apply_async加载函数,而不是apply。apply_async 是非阻塞的异步加载,可以保证进程并发。 只用apply的话,没有并发,只是排队加载。

pool.close() 停止加载函数
pool.join() 执行任务

import multiprocessing as mp 
from multiprocessing import Pool 
        # 用一半的资源 
        num_cpu_using = int(mp.cpu_count()*0.5)
        print("num cores using:", num_cpu_using)
        pool = Pool(processes= num_cpu_using)
        for arg1 in range(0,10,1):
            pool.apply_async(self.func, args = (arg1, arg2, ..))

        pool.close()
        pool.join()
        print("All tasks finished.")
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。