阻塞添加进程 apply()
from multiprocessing import Pool , current_process
def funca(var):
print("函数funca,进程名字{},进程id{}".format(current_process().name, current_process().pid))
for x in range(100000):
# print("AAAAA")
x += 1
print("函数funca结束《》《》《》《》")
return "A"+str(var)
def funcb(var):
print("函数funcb,进程名字{},进程id{}".format(current_process().name, current_process().pid))
for x in range(100000):
# print("BBBBB")
x += 1
print("函数funcb结束*********")
return "B"+str(var)
def main():
# 进程池Pool类实例化
pool = Pool(3)
# 电脑3内核,进程池设置三个进程
# 阻塞形式添加进程,其返回值就是函数进程执行后的返回值
resa1 = pool.apply(func=funca,args=(1,))
resa2 = pool.apply(func=funca,args=(2,))
resa3 = pool.apply(func=funca,args=(3,))
resa4 = pool.apply(func=funcb,args=(11,))
resa5 = pool.apply(func=funcb,args=(12,))
resa6 = pool.apply(func=funcb,args=(13,))
reslist = []
# 用循环形式添加五个进程,并把返回值存入列表
for x in range(21,26):
reslist.append(pool.apply(func=funca,args=(x,)))
# 关闭进程池
pool.close()
# 关闭进程
pool.join()
print(resa1,resa2,resa3,resa4,resa5,resa6)
print(reslist)
if __name__ == '__main__':
main()
非阻塞添加进程apply_async()
from multiprocessing import Pool , current_process
def funca(var):
print("函数funca,进程名字{},进程id{}".format(current_process().name, current_process().pid))
for x in range(100000):
# print("AAAAA")
x += 1
print("函数funca结束《》《》《》《》")
return "A"+str(var)
def funcb(var):
print("函数funcb,进程名字{},进程id{}".format(current_process().name, current_process().pid))
for x in range(100000):
# print("BBBBB")
x += 1
print("函数funcb结束*********")
return "B"+str(var)
def main():
# 进程池Pool类实例化
pool = Pool(3)
# 电脑3内核,进程池设置三个进程
# 非阻塞添加进程
resa1 = pool.apply_async(func=funca,args=(1,))
# 其返回值<multiprocessing.pool.ApplyResult object at 0x000001E302571E10>
pool.apply_async(func=funca,args=(2,))
pool.apply_async(func=funca,args=(3,))
pool.apply_async(func=funcb,args=(11,))
pool.apply_async(func=funcb,args=(12,))
pool.apply_async(func=funcb,args=(13,))
# 使用循环添加非阻塞进程,并用列表获取其返回值
reslist = []
for x in range(21,26):
reslist.append(pool.apply_async(func=funca,args=(x,)))
reslist.append(pool.apply_async(func=funcb,args=(x+10,)))
# 这样获取的reslist是一个进程对象列表,使用循环或者推导式获得正常结果
res_str_list = [var.get() for var in reslist ]
# 关闭进程池
pool.close()
# 关闭进程
pool.join()
print(resa1)
print(resa1.get())
print(reslist)
print(res_str_list)
if __name__ == '__main__':
main()