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
好记性不如烂键盘---点滴、积累、进步!