python的multiprocessing的pool.map函数使用方法

顺便记录一下:

import numpy as np
from time import time
from multiprocessing import Process, Queue
import multiprocessing as mp
import random

def my_func(x):
    s0 = time()
    res = 0
    for _ in range(x*1000000):
        res += 1
    print(mp.current_process(),'run time:%.3f s, result:%.1f'%(time()-s0,res))
    return res

'''
multiprocessing.Pool 只是用来启动多个进程而不是在每个core上启动一个进程。
换句话说Python解释器本身不会去在每个core或者processor去做负载均衡。
这个是由操作系统决定的。如果你的工作特别的计算密集型的话,操作系统确实会分配更多的core,但这也不是Python或者代码所能控制的或指定的。 
multiprocessing.Pool(num)中的num可以很小也可以很大,比如I/O密集型的操作,这个值完全可以大于cpu的个数。 
硬件系统的资源分配是由操作系统决定的,如果你希望每个core都在工作,就需要更多的从操作系统出发了~
这段话转自https://segmentfault.com/q/1010000011117956
'''
def main():
  pool = mp.Pool(processes=mp.cpu_count())
  st = time()
  result = pool.map(my_func, [30]*8)
  print('total run time: %.3f s'%(time()-st))
  print(result)

if __name__ == "__main__":
    main()

同样地看下输出:

 run time:3.833 s, result:30000000.0
 run time:3.806 s, result:30000000.0
 run time:4.169 s, result:30000000.0
 run time:4.149 s, result:30000000.0
 run time:3.717 s, result:30000000.0
 run time:3.682 s, result:30000000.0
 run time:4.034 s, result:30000000.0
 run time:3.960 s, result:30000000.0
total run time: 4.712 s
[30000000, 30000000, 30000000, 30000000, 30000000, 30000000, 30000000, 30000000]

 

你可能感兴趣的:(python)