• 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/  官方网站

  • 相关阅读:
    工厂模式
    不错公众号
    linux 下的 正则表达式(awk,sed,awk)学习
    CentOS 7 中安装 bcc-tools
    docker
    Python爬去知乎上问题下所有图片
    过滤重复数据取一条
    阿里云80端口被系统占用
    过滤重复项取时间最近的数据
    Layui的几个问题记录一下
  • 原文地址:https://www.cnblogs.com/360linux/p/13062105.html
Copyright © 2020-2023  润新知