0718py:Pool进程池添加进程

阻塞添加进程 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()

猜你喜欢

转载自blog.csdn.net/whqwjb/article/details/81094617