首页 > 移动平台 > 详细

RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase.

时间:2020-07-08 18:27:36      阅读:61      评论:0      收藏:0      [点我收藏+]

问题描述:在运行下面代码时出现RuntimeError: An attempt has been made to start a new process before the   current process has finished its bootstrapping phase.

# TODO 进程池的使用
from multiprocessing import Pool
import os, time, random

def worker(msg):
    t_start = time.time()
    print("%s开始执行,进程号为%d" % (msg,os.getpid()))
    # random.random()随机生成0~1之间的浮点数
    time.sleep(random.random()*2) 
    t_stop = time.time()
    print(msg,"执行完毕,耗时%0.2f" % (t_stop-t_start))

# 定义一个进程池,最大进程数3
p = Pool(3)  
for i in range(0,10):
	# Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))
	# 每次循环将会用空闲出来的子进程去调用目标
	p.apply_async(worker,(i,))

print("----start----")
p.close()  # 关闭进程池,关闭后po不再接收新的请求
p.join()  # 等待po中所有子进程执行完成,必须放在close语句之后
print("-----end-----")	

 技术分享图片

解决方法:通过main方法来执行python文件

# TODO 进程池的使用
from multiprocessing import Pool
import os, time, random

def worker(msg):
    t_start = time.time()
    print("%s开始执行,进程号为%d" % (msg,os.getpid()))
    # random.random()随机生成0~1之间的浮点数
    time.sleep(random.random()*2) 
    t_stop = time.time()
    print(msg,"执行完毕,耗时%0.2f" % (t_stop-t_start))

def main():
	# 定义一个进程池,最大进程数3
	p = Pool(3)  
	for i in range(0,10):
		# Pool().apply_async(要调用的目标,(传递给目标的参数元祖,))
		# 每次循环将会用空闲出来的子进程去调用目标
		p.apply_async(worker,(i,))

	print("----start----")
	p.close()  # 关闭进程池,关闭后po不再接收新的请求
	p.join()  # 等待po中所有子进程执行完成,必须放在close语句之后
	print("-----end-----")

if __name__ == ‘__main__‘:
	main()

 运行结果:

技术分享图片

 

RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase.

原文:https://www.cnblogs.com/xiaofengcanyuelong/p/13268195.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!