python的多进程库multiprocessing详解

背景
multiprocessing库用于进行python的多进程编程。一般来说,编程语言要进行并发编程,多线程会比多进程优先考虑,因为多线程比多进程更省资源。但是由于python底层的GIL的存在,导致了多线程编程时,实际上每个时刻只有一个线程在运行,也即只有一个核被利用起来,并没有起到并行的效果(此说法针对的是cpu密集型的代码,如果是I/O密集型的,多线程还是会有效果的)。于是为了真正利用起来多核,python中需要使用多进程编程。

multiprocessing的进程池的使用
1)基本操作流程:在主进程中实例化一个进程池pool对象---->往进程池中放入多个进程---->是否阻塞主进程---->结束
2)代码示例:
 

# coding = utf-8
import multiprocessing
import time

def sleepAndPrint():
    time.sleep(5)
    print("print after sleeping, process name: "+multiprocessing.current_process().name)

if __name__=="__main__":
    pool = multiprocessing.Pool(4)
    for item in range(4):
    pool.apply(sleepAndPrint)#apply方法,每个进程之间是相互阻塞的,即实际上多个进程之间是串行的效果

    pool.close()#close方法关闭进程池,此时不允许新的子进程进入。close方法必须在join方法调用前调用
    pool.join()#主进程被阻塞,等子进程全部执行完毕后再执行print
    print("test end")

3)代码执行结果

4)将apply方法替换成apply_async方法,并传入参数。代码示例:
 

# coding = utf-8
import multiprocessing
import time

def sleepAndPrint(seconds):
    time.sleep(seconds)
    print("print after sleeping, process name: "+multiprocessing.current_process().name)

if __name__=="__main__":
    pool = multiprocessing.Pool(4)
    for item in range(4):
        pool.apply_async(sleepAndPrint, args=(5, ))#apply_async方法,通过args参数传参,进程之前不阻塞,真正意义上的并行

    pool.close()#close方法关闭进程池,此时不允许新的子进程进入。close方法必须在join方法调用前调用
    pool.join()#主进程被阻塞,等子进程全部执行完毕后再执行print
    time.sleep(5)
    print("test end")

5)代码执行结果:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值