Python多进程Pool进程池的使用

2025-10-25 07:58:03

1、打开Python开发工具IDLE,新建‘poll.py’文件,写代码如下:

from multiprocessing import Pool

def fun(x):

    return x*2

if __name__ == '__main__':

    p = Pool(5)      #如果参数为空,默认为os.cpu_count()

    print(p.map(fun, [1, 2, 3]))

注意这里一定要写if __name__ == '__main__':在多进程程序里,必须指明主进程

Python多进程Pool进程池的使用

2、F5运行程序,很快打印出列表每项乘以2后的结果,[2, 4, 6] 这个计算的速度肯定比不用多进程快,尤其数据很大的时候,这里就不去测试。

Python多进程Pool进程池的使用

3、还有另外一种方法,也能实现同样的功能,改写‘pool.py’代码如下:

from multiprocessing import Pool

def fun(x):

    return x*2

if __name__=='__main__':

    p = Pool(5)

    list1=[]

    for i in range(5):

        print (i)

        res = p.apply_async(fun,[i,])

        list1.append(res)

    for j in list1:

        print (j.get())

这个看起来更好理解一点,apply_async(fun,[i,])是创建异步进程的方法,进程创建后立即执行,get()用于获取内容,注意不能再第一个循环里用,不然会等待进程get返回值阻塞主进程的继续执行。

Python多进程Pool进程池的使用

4、F5运行程序,很快打印出每项乘以2后的结果:

0

1

2

3

4

0

2

4

6

8

Python多进程Pool进程池的使用

5、如果需要等待所有进程结束再继续执行主进程,需要改写代码如下:

from multiprocessing import Pool

def fun(x):

    return x*2

if __name__=='__main__':

    p = Pool(5)

    list1=[]

    for i in range(5):

        print (i)

        res = p.apply_async(fun,[i,])

        list1.append(res)

    p.close()

    p.join()

    print('进程池创建的进程已结束')

    for j in list1:

        print (j.get())

p.close(),只是不允许再使用进程池创建新进程,必须在p.join()前

Python多进程Pool进程池的使用

6、F5运行程序,很快打印出进程池创建进程结束的消息以及每项乘以2后的结果:

0

1

2

3

4

进程池创建的进程已结束

0

2

4

6

8

Python多进程Pool进程池的使用

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢