Python并行计算pp模块实践笔记
2017-10-16 15:08
344 查看
最近已集群模式适用了下Python并行计算的pp模块,例子为官方的计算素数的和,特记录如下:
环境如下(三节点,每个节点先pip install pp安装pp模块):
node-1 任务发起方
node-4,node-6 任务执行方,ppserver,运行ppserver.py
1、node-4和node-6 运行ppserver.py的脚本,以自动发现模式运行,通过debug输出,可以发现自动发现是通过广播机制实现的
2、node-1上面运行计算素数脚本,脚本中ppservers写为(“*”,)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Software: PyCharm
import pp
import math,sys,time
def IsPrime(n):
if not isinstance(n,int):
raise TypeError("must be a int")
if n<2:
return False
if n==2:
return True
max= int(math.ceil(math.sqrt(n)))
i=2
while i<=max:
if n%i==0:
return False
i+=1
return True
def sum_primes(n):
return sum([x for x in xrange(2,n) if IsPrime(x)])
def usage():
print '''
Usage: python sum_primes.py [ncpus]
[ncpus] - the number of workers to run in parallel,
if omitted it will be set to the number of processors in the system
'''
ppservers=("*",) #自动发现ppserver
if len(sys.argv)>1:
num=sys.argv[1]
job_server=pp.Server(ncpus=int(num),ppservers=ppservers)
else:
job_server=pp.Server(ppservers=ppservers)
print "start pp with",job_server.get_ncpus(),"workers"
# job1=job_server.submit(func=sum_primes,args=(300,),depfuncs=(IsPrime,),modules=("math",))
start_time = time.time()
inputs = (10000000, 10010000, 10020000, 10030000, 10040000, 10050000, 10060000, 10070000,10060001,10080002)
jobs = [(input, job_server.submit(sum_primes,(input,), (IsPrime,), ("math",))) for input in inputs]
for input, job in jobs:
print "Sum of primes below", input, "is", job()
print "Time elapsed: ", time.time() - start_time, "s"
job_server.print_stats()
脚本运行后,通过node-4和node-6的日志输出,可以发现已经开始接收执行任务
通过top命令可以发现计算任务开始执行(ppworker),cpu负载达到100%
3 node-1上面的命令执行结果,我们发现10个素数的计算任务,node-6分配了8个(IP为172.16.20.6),node-4分配了2个(IP为17216.20.4)---(参照官方文档,ncpus指定为0,node-1本身不参与实际的计算)
参考:
http://www.parallelpython.com/ 官方网站
环境如下(三节点,每个节点先pip install pp安装pp模块):
node-1 任务发起方
node-4,node-6 任务执行方,ppserver,运行ppserver.py
1、node-4和node-6 运行ppserver.py的脚本,以自动发现模式运行,通过debug输出,可以发现自动发现是通过广播机制实现的
2、node-1上面运行计算素数脚本,脚本中ppservers写为(“*”,)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Software: PyCharm
import pp
import math,sys,time
def IsPrime(n):
if not isinstance(n,int):
raise TypeError("must be a int")
if n<2:
return False
if n==2:
return True
max= int(math.ceil(math.sqrt(n)))
i=2
while i<=max:
if n%i==0:
return False
i+=1
return True
def sum_primes(n):
return sum([x for x in xrange(2,n) if IsPrime(x)])
def usage():
print '''
Usage: python sum_primes.py [ncpus]
[ncpus] - the number of workers to run in parallel,
if omitted it will be set to the number of processors in the system
'''
ppservers=("*",) #自动发现ppserver
if len(sys.argv)>1:
num=sys.argv[1]
job_server=pp.Server(ncpus=int(num),ppservers=ppservers)
else:
job_server=pp.Server(ppservers=ppservers)
print "start pp with",job_server.get_ncpus(),"workers"
# job1=job_server.submit(func=sum_primes,args=(300,),depfuncs=(IsPrime,),modules=("math",))
start_time = time.time()
inputs = (10000000, 10010000, 10020000, 10030000, 10040000, 10050000, 10060000, 10070000,10060001,10080002)
jobs = [(input, job_server.submit(sum_primes,(input,), (IsPrime,), ("math",))) for input in inputs]
for input, job in jobs:
print "Sum of primes below", input, "is", job()
print "Time elapsed: ", time.time() - start_time, "s"
job_server.print_stats()
脚本运行后,通过node-4和node-6的日志输出,可以发现已经开始接收执行任务
通过top命令可以发现计算任务开始执行(ppworker),cpu负载达到100%
3 node-1上面的命令执行结果,我们发现10个素数的计算任务,node-6分配了8个(IP为172.16.20.6),node-4分配了2个(IP为17216.20.4)---(参照官方文档,ncpus指定为0,node-1本身不参与实际的计算)
参考:
http://www.parallelpython.com/ 官方网站
相关文章推荐
- python并行计算的简单实现--pp
- 分享一个简单易用的python并行模块【PP模块】
- Python 多进程并行编程实践: multiprocessing 模块
- java并行计算Fork/Join和python并行计算pp
- 分享一个简单易用的python并行模块【PP模块】
- Parallel Python实现程序的并行多cpu多核利用【pp模块】 推荐
- Python笔记(1)—常用内建模块—datatime
- Python学习笔记-模块介绍(三)-模块包和搜索路径
- 远程拷贝文件及文件夹+python导入自己的模块 笔记
- Python学习笔记--模块
- python模块-decimal小数精度处理-学习笔记28
- Python 学习笔记(6)--常用模块(2)
- Python学习笔记----模块
- python笔记之Cmd模块
- Python 学习笔记(四):常用内建模块和第三方模块
- python-time模块计算程序运行的时间
- Python学习笔记4-如何快速的学会一个Python的模块、方法、关键字
- 【Python】学习笔记——-6.2、使用第三方模块
- python学习笔记(三) 实现switch,内建函数,模块和包
- Python学习笔记4(函数与模块)