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()

同样地看下输出:

<SpawnProcess(SpawnPoolWorker-3, started daemon)> run time:3.833 s, result:30000000.0
<SpawnProcess(SpawnPoolWorker-4, started daemon)> run time:3.806 s, result:30000000.0
<SpawnProcess(SpawnPoolWorker-1, started daemon)> run time:4.169 s, result:30000000.0
<SpawnProcess(SpawnPoolWorker-2, started daemon)> run time:4.149 s, result:30000000.0
<SpawnProcess(SpawnPoolWorker-7, started daemon)> run time:3.717 s, result:30000000.0
<SpawnProcess(SpawnPoolWorker-8, started daemon)> run time:3.682 s, result:30000000.0
<SpawnProcess(SpawnPoolWorker-5, started daemon)> run time:4.034 s, result:30000000.0
<SpawnProcess(SpawnPoolWorker-6, started daemon)> run time:3.960 s, result:30000000.0
total run time: 4.712 s
[30000000, 30000000, 30000000, 30000000, 30000000, 30000000, 30000000, 30000000]

 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值