python多进程常规操作,无需获取处理函数返回值
from multiprocessing import Process
import time
pronum = 32
def coding(pi, files):
"""子进程要执行的代码,多进程要创建一个处理函数,这里构造处理逻辑"""
print('子进程处理中...')
'''
代码块
'''
if __name__ == '__main__':
# 多进程
multi_start = time.time()
pro_list = []
for i in range(pronum):
p = Process(target=coding, args=(参数一,参数二))
p.start()
pro_list.append(p)
for p in pro_list:
p.join() 必要
print("主进程结束!")
multi_end = time.time()
print('\nMulti process cost time:', multi_end - multi_start)
python多进程常规操作,获取处理函数返回值
from multiprocessing import Pool
def coding(pi, files):
"""子进程要执行的代码,多进程要创建一个处理函数,这里构造处理逻辑"""
print('子进程处理中...')
'''
代码块
'''
return result_value
if __name__ == '__main__':
# 多进程
multi_start = time.time()
pronum= 32
pool = Pool(processes=pronum)
for i in range(pronum):
result = pool.apply_async(coding, (参数一,参数二))
results.append(result.get())
pool.close()
pool.join()
res = [i.get() for i in results]
print(res)
print("主进程结束!")
multi_end = time.time()
print('\nMulti process cost time:', multi_end - multi_start)
pytorch实现在cuda上多进程,获取处理函数返回值
与上述常规操作能获取返回值多进程代码大同小异
#在上述代码块中添加此行设置,可放在导包配置下面
torch.multiprocessing.set_start_method(‘forkserver‘,force = True)#此行代码必不可少
note1:pool.apply_async(coding, (参数一,参数二))返回的是ApplyResult对象,此时不是想要的返回值,要获取对象中的真实返回值,要用其内部get函数
如:True_value = result.get()
note2:如果coding函数返回值数量为2,则我们顺次获取返回值的方法为
returnResult1 = True_value[0]
returnResult2 = True_value[1]
另外附查询linux服务器CPU个数,CPU核数命令(参考这些信息,防止将进程数设置得过大)
# 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# 查看每个物理CPU中core的个数(即核数)
cat /proc/cpuinfo| grep "cpu cores"| uniq