Python并行计算pp模块实践笔记

最近已集群模式适用了下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/  官方网站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值