本文将介绍Python分布式并行编程模块Parallel python (简称PP), pp-1.6.4.4的使用。
PP是一个python模块,提供在SMP(多处理器或多核)和集群(通过网络连接的计算机)上并行执行python代码的机制。
PP模块克服了GIL(全局解释器锁)这个限制,并提供了一种写并行python应用程序的简单方法。内部ppsmp使用进程和IPC(进程间通信)来组织并行计算。后者的所有细节和复杂性完全被隐藏,应用程序只需负责提交作业并检索其结果(写并行应用程序的最简单的方法)。 跨平台可移植性和动态负载平衡允许PP即使在异构和多平台集群上也能有效地并行计算。
目 录
1、安装
1、pip安装
# pip install pp
2、源码安装
# tar -xvzf pp-xxx.tar.gz
# python setup.py install
2、特点
- 在SMP和集群上并行执行python代码
- 易于理解和实现基于Job的并行化技术(易于并行转换串行应用程序)
- 自动检测最佳配置(默认情况下工作进程数设置为有效处理器数)
- 动态处理器分配(工作进程数可以在运行时更改)
- 具有相同功能的后续作业的低开销(实现透明高速缓存以减少开销)
- 动态负载平衡(作业在运行时在处理器之间分布)
- 容错(如果其中一个节点发生故障,任务在其他节点上重新调度)
- 计算资源的自动发现
- 计算资源的动态分配(自动发现和容错的结果)
- 网络连接的基于SHA的认证
- 跨平台可移植性和互操作性(Windows,Linux,Unix,Mac OS X)
3、PP的运行模式
主要分为下面2种方式。
1、本地模式
利用cpu多核多进程,代码方式:
import pp
job_server = pp.Server(cpu核心数)
job = job_server.submit(工作函数,入参,相关函数,相关引用模块)
job()
2、集群模式
创建代码并分发worker执行任务返回执行结果。需要在各个节点安装pp包,并在不同的节点运行ppserver。运行方式:python ppserver.py -p 9696 -s 123 -w 2
各参数含义:-p:通信的端口号, -s:密码 -w:cpu核心数
#python ppserver.py -p 9696 -s 123 -w 2
workers = (host1:9696,host2:9696,...)
job_server = pp.Server(ppservers=workers, secret='123')
job = job_server.submit(工作函数,入参,相关函数,相关引用模块)
job()
一般是master-worker架构形式:
4、使用示例
1、单机模式
建立pp_test.py(该代码引用自网络):
import pp
import math
import time
def isprime(n):
if not isinstance(n, int):
raise TypeError("argument passed to is_prime is not of 'int' type")
if n < 2:
return False
if n == 2:
return True
maxvalue = int(math.ceil(math.sqrt(n)))
i = 2
while i <= maxvalue:
if n % i == 0:
return False
i += 1
return True
def sum_primes(n):
return sum([x for x in range(2,n) if isprime(x)])
if __name__ == "__main__":
job_server = pp.Server()
print("***并行计算***")
t1 = time.time()
f1 = job_server.submit(sum_primes, (100000,), (isprime,), ("math",))
f2 = job_server.submit(sum_primes, (100100,), (isprime,), ("math",))
f3 = job_server.submit(sum_primes, (100200,), (isprime,), ("math",))
f4 = job_server.submit(sum_primes, (100300,), (isprime,), ("math",))
a = f1()
b = f2()
c = f3()
d = f4()
t2 = time.time()
print(str(t2-t1),a,b,c,d)
5、类似模块
1、Python的multiprocessing模块不但支持多进程,其中的managers子模块还支持把多进程分布到多台机器上。
2、基于Python的分布式执行引擎 Ray
相比python原生的multiprocess和multithreading,Rag使用起来更简单强大。
参考:https://www.parallelpython.com
参考:https://blog.csdn.net/wangshuang1631/article/details/53196137/