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]

 

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值