如何使用" pool"来处理每个处理器的处理时间结束在Python?

时间:2016-05-21 07:31:29

标签: python multiprocessing

我在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(),但我需要知道每个核心何时完成是工作的一部分。如果我在函数中直接加上时间戳,我将获得许多时间值,而不知道它处理的核心。

欢迎任何建议!

1 个答案:

答案 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时间。)