我在Python中使用Multiprocessing库在多个核心上分发功能。要做到这一点,我使用" Pool"功能,但我想知道每个处理器何时完成其工作。
以下是代码:
def parallel(m,G):
D=0
for i in xrange(G):
D+=random()
return 1*(D<1)
pool=Pool()
TOTAL=0
for i in xrange(10):
TOTAL += sum(pool.map(partial(parallel,G=2),xrange(100)))
print TOTAL
我知道如何在正常情况下使用time.time(),但我需要知道每个核心何时完成是工作的一部分。如果我在函数中直接加上时间戳,我将获得许多时间值,而不知道它处理的核心。
欢迎任何建议!
答案 0 :(得分:1)
您可以返回完成时间以及parallel
的实际结果,然后选择每个工作人员的最后一个时间戳。
import time
from random import random
from functools import partial
from multiprocessing import Pool, current_process
def parallel(m, G):
D = 0
for i in xrange(G):
D += random()
# uncomment to give the other workers more chances to run
# time.sleep(.001)
return (current_process().name, time.time()), 1 * (D < 1)
# don't deny the existence of Windows
if __name__ == '__main__':
pool = Pool()
TOTAL = 0
proc_times = {}
for i in xrange(5):
# times is a list of proc_name:timestamp pairs
times, results = zip(*pool.map(partial(parallel, G=2), xrange(100)))
TOTAL += sum(results)
# process_times_loc is guaranteed to hold the last timestamp
# for each proc_name, see the doc on dict
proc_times_loc = dict(times)
print 'local completion times:', proc_times_loc
proc_times.update(proc_times_loc)
print TOTAL
print 'total completion times:', proc_times
然而,当作业如此简单时,您可能会发现每次调用time.time
都会消耗太多的CPU时间。)