我有一个函数,它执行一些模拟并以字符串格式返回数组。
我想为不同的输入参数值运行模拟(函数),超过10000个可能的输入值,并将结果写入单个文件。
我正在使用多处理,具体来说是pool.map函数来并行运行模拟。
由于运行模拟函数10000次的整个过程需要很长时间,因此我真的希望跟踪整个操作的过程。
我认为我的当前代码的问题在于,pool.map在这些操作期间没有任何进程跟踪地运行函数10000次。一旦并行处理完成运行10000次模拟(可能需要数小时到数天),然后我保持跟踪当10000个模拟结果保存到文件时..所以这实际上并没有跟踪pool.map操作的处理过程。
是否有一种简单的方法可以修复我的代码,以允许进程跟踪?
我想为不同的输入参数值运行模拟(函数),超过10000个可能的输入值,并将结果写入单个文件。
我正在使用多处理,具体来说是pool.map函数来并行运行模拟。
由于运行模拟函数10000次的整个过程需要很长时间,因此我真的希望跟踪整个操作的过程。
我认为我的当前代码的问题在于,pool.map在这些操作期间没有任何进程跟踪地运行函数10000次。一旦并行处理完成运行10000次模拟(可能需要数小时到数天),然后我保持跟踪当10000个模拟结果保存到文件时..所以这实际上并没有跟踪pool.map操作的处理过程。
是否有一种简单的方法可以修复我的代码,以允许进程跟踪?
def simFunction(input):
# Does some simulation and outputs simResult
return str(simResult)
# Parallel processing
inputs = np.arange(0,10000,1)
if __name__ == "__main__":
numCores = multiprocessing.cpu_count()
pool = multiprocessing.Pool(processes = numCores)
t = pool.map(simFunction, inputs)
with open('results.txt','w') as out:
print("Starting to simulate " + str(len(inputs)) + " input values...")
counter = 0
for i in t:
out.write(i + '\n')
counter = counter + 1
if counter%100==0:
print(str(counter) + " of " + str(len(inputs)) + " input values simulated")
print('Finished!!!!')
multiprocessing.get_logger()
返回受锁保护的功能有限的记录器,详情见 https://docs.python.org/2/library/multiprocessing.html#logging - Dr. Jan-Philip Gehrcke