Parallel Python 分布式计算模块

我要开发同款
欢哥2013年11月02日
76阅读
所属分类Python、程序开发、并发/并行处理框架
授权协议GPL

作品详情

ParallelPython是Python进行分布式计算的开源模块,能够将计算压力分布到多核CPU或集群的多台计算机上,能够非常方便的在内网中搭建一个自组织的分布式计算平台。先从多核计算开始,普通的Python应用程序只能够使用一个CPU进程,而通过ParallelPython能够很方便的将计算扩展到多个CPU进程中

示例代码:

#!/usr/bin/python#File:sum_primes.py#Author:VItaliiVanovschi#Desc:Thisprogramdemonstratesparallelcomputationswithppmodule#Itcalculatesthesumofprimenumbersbelowagivenintegerinparallel#ParallelPythonSoftware:https://www.parallelpython.comimportmath,sys,timeimportppdefisprime(n):"""ReturnsTrueifnisprimeandFalseotherwise"""ifnotisinstance(n,int):raiseTypeError("argumentpassedtois_primeisnotof'int'type")ifn<2:returnFalseifn==2:returnTruemax=int(math.ceil(math.sqrt(n)))i=2whilei<=max:ifn%i==0:returnFalsei+=1returnTruedefsum_primes(n):"""Calculatessumofallprimesbelowgivenintegern"""returnsum([xforxinxrange(2,n)ifisprime(x)])print"""Usage:pythonsum_primes.py[ncpus][ncpus]-thenumberofworkerstoruninparallel,ifomitteditwillbesettothenumberofprocessorsinthesystem"""#tupleofallparallelpythonserverstoconnectwithppservers=()#ppservers=("10.0.0.1",)iflen(sys.argv)>1:ncpus=int(sys.argv[1])#Createsjobserverwithncpusworkersjob_server=pp.Server(ncpus,ppservers=ppservers)else:#Createsjobserverwithautomaticallydetectednumberofworkersjob_server=pp.Server(ppservers=ppservers)print"Startingppwith",job_server.get_ncpus(),"workers"#Submitajobofcalulatingsum_primes(100)forexecution.#sum_primes-thefunction#(100,)-tuplewithargumentsforsum_primes#(isprime,)-tuplewithfunctionsonwhichfunctionsum_primesdepends#("math",)-tuplewithmodulenameswhichmustbeimportedbeforesum_primesexecution#Executionstartsassoonasoneoftheworkerswillbecomeavailablejob1=job_server.submit(sum_primes,(100,),(isprime,),("math",))#Retrievestheresultcalculatedbyjob1#Thevalueofjob1()isthesameassum_primes(100)#Ifthejobhasnotbeenfinishedyet,executionwillwaithereuntilresultisavailableresult=job1()print"Sumofprimesbelow100is",resultstart_time=time.time()#Thefollowingsubmits8jobsandthenretrievestheresultsinputs=(100000,100100,100200,100300,100400,100500,100600,100700)jobs=[(input,job_server.submit(sum_primes,(input,),(isprime,),("math",)))forinputininputs]forinput,jobinjobs:print"Sumofprimesbelow",input,"is",job()print"Timeelapsed:",time.time()-start_time,"s"job_server.print_stats()#ParallelPythonSoftware:https://www.parallelpython.com
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论