Python并行计算

2017/11/10 Python

  当你在使用 Python 进行 for 循环时候,发现计算的效率及其慢的时候,完全可以考虑使用 Python 的并行操作,毕竟这么多核心不用也是一种浪费。还有 Python 标准库提供了并行库相当的简洁好用。

Python中的标准库

  Python 标准库中有两个提供并行计算一个是multiprocessing, 另一个是 threading,推荐使用 multiprocessing, 当只有I/O密集型操作时候才有用到threading的必要。当然由于 Python 的 Global interpreter lock存在,导致 Python 不能进行并行编程,只能进行并发编程。

多进程multiprocessing的使用

  • multiprocessing模块还是非常好用的。

单参数函数执行并计算

import multiprocessing

def f(x):
    return x*x

# Get all cores
cores = multiprocessing.cpu_count()
# start a pool
pool = multiprocessing.Pool(processes=cores)

tasks = [1,2,3,4,5]

# do parallel calculate
print(pool.map(f,tasks))

其实map函数在执行的时候就已经是并行操作了,只不过multiprocessing模块集成了map方法

多参数函数执行并行计算

Python3 中使用starmap方法来实现

import multiprocessing

def add(x, y):
	return x+y

# Get all worker processes
cores = multiprocessing.cpu_count()

# Start all worker processes
pool = multiprocessing.Pool(processes=cores)
x1 = list(range(5))
y1 = list(range(5))

tasks = [(x,y) for x in x1 for y in y1]

print(pool.starmap(add,tasks))

Python2 中需要一个函数对多参数函数包装下

import multiprocessing

def add(x, y):
	return x+y

def merge_add(args):
	return add(*args)


# Get all worker processes
cores = multiprocessing.cpu_count()

# Start all worker processes
pool = multiprocessing.Pool(processes=cores)
x1 = list(range(5))
y1 = list(range(5))

tasks = [(x,y) for x in x1 for y in y1]

print(pool.map(merge_add,tasks))

参考




  • 除非注明,本博文即为原创,转载请注明本博文链接地址
  • 本博文只用于分享和交流知识,不得转载商用或个人牟利
  • 如果您觉得文章对您有帮助,可以通过点击下面按钮分享

Search

    Post Directory