python模块推荐[]multiprocessing-Pool多核批处理
场景
作业是独立的,且每个作业都比较耗时,但是数量非常多。这时候使用多核进行计算作业能显著提高效率。
有点类似大家一起干。如果是普通的单核处理的话,就类似于 一人干活,其他人休息,当然慢。
单核处理任务
比如 60次特殊的加法,每个加法之前先休息1s,增加这个任务的时间,
你可以根据自己的需求定义任务函数。
1 | from random import random |
输出:1
it take 60.1150267124176 seconds
多核处理
1 | from multiprocessing import Pool |
输出:1
it take 2.5520200729370117 seconds
同样的任务,在48核电脑上只需要2.5秒就能完成。
我们可以看到使用多核处理能显著地加快耗时任务的快速完成。
如果任务耗时很短,则使用多核效果不明显。
比例比如执行一次普通加法,大约耗时7us,时间非常快,而你分配给核的时间可能和任务的时间差不多,这时候采用多核效果就不好。
示例1: 单核普通加法1
2
3
4
5
6
7
8
9
10
11
12
13
14from random import random
import time
def task():
# time.sleep(1)
a = random()
b = random()
return a+b
start = time.time()
# range(100000000)
for i in range(10**7):
task()
end = time.time()
span= end-start
print("it take %s seconds"%span)
输出:
1 | it take 2.497889518737793 seconds |
示例2: 多核普通加法
1 | from multiprocessing import Pool |
输出:1
it take 3.088542938232422 seconds
我们可以看到同样的任务,多核的完成需要的时间反而比单核多。
对于时间非常短的任务,不适合多核做。
这和实现生活中的情形也比较相似,对于大的项目,领导统筹协调各方资源能够加快项目的完成。
对于小的项目,交给一个人负责就可以了。
如果task 中需要接受多个参数可通过[[],[]]数据结构进行封装示例
task(1,2) task(1,3) task(2,10)等作业
示例代码:
1 | from multiprocessing import Pool |
输出:
1 | it take 3.7886974811553955 seconds |
其他事项
- process参数来指定使用的核的数目,默认是电脑最大核的数目,Pool(processes = 3)