python 多进程, 进程池 示例

本示例这里进程池设定的pool_num为4,但是num_task是12,也就是说4个工人同时在总共4个活,还有8个活就在排队,
哪个工人干好了就赶紧领取下个活继续干,如此直到活全部干完为止。

# -*- coding:utf-8 -*-

from multiprocessing import Pool
import os
import time


class AA(object):
    def __init__(self):
        print('init')
        self.ab = 3

    def task(self, n):
        time.sleep(5)
        self.ab += n
        print("\n进程(%s), 收到%s, +n=%s" % (os.getpid(), n, self.ab))


if __name__ == '__main__':
    aa = AA()
    
    #pool_num = multiprocessing.cpu_count()
    pool_num = 4
    p = Pool(pool_num)

    num_task = 12
    for i in range(num_task):
        t = p.apply_async(func=aa.task, args=(i,))

    p.close()
    p.join()
    print("done !  主进程!aa.ab=%s" % aa.ab)
    print("主进程ID  %s " % os.getpid())

打印输出如下:

/media/algo/data_1/software/anconda_install/envs/pytorch1.7.0_general/bin/python3 /media/algo/data_1/everyday/20230620/demo_pool.py
init

进程(30796), 收到0, +n=3

进程(30798), 收到2, +n=5

进程(30797), 收到1, +n=4

进程(30799), 收到3, +n=6

进程(30796), 收到4, +n=7

进程(30798), 收到5, +n=8

进程(30797), 收到6, +n=9

进程(30799), 收到7, +n=10

进程(30796), 收到8, +n=11

进程(30798), 收到9, +n=12

进程(30797), 收到10, +n=13

进程(30799), 收到11, +n=14
done !  主进程!aa.ab=3
主进程ID  30793 

Process finished with exit code 0
posted @ 2023-06-20 20:42  无左无右  阅读(55)  评论(0编辑  收藏  举报