• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python做并行计算可以吗

python 搞代码 4年前 (2022-01-09) 11次浏览 已收录 0个评论

一、概览

Parallel Python是一个python模块,提供在SMP(具有多个处理器或多核的系统)和集群(通过网络连接的计算机)上并行执行python代码的机制。它轻巧,易于安装和与其他python软件集成。Parallel Python是一个用纯Python编写的开源和跨平台模块。

二、特性

在SMP和集群上并行执行python代码

易于理解和实现基于Job的并行化技术(易于并行转换串行应用程序)

自动检测最佳配置(默认情况下工作进程数设置为有效处理器数)

动态处理器分配(工作进程数可以在运行时更改)

具有相同功能的后续作业的低开销(实现透明高速缓存以减少开销)

动态负载平衡(作业在运行时在处理器之间分布)

容错(如果其中一个节点发生故障,任务在其他节点上重新调度)

计算资源的自动发现

计算资源的动态分配(自动发现和容错的结果)

网络连接的基于SHA的认证

跨平台可移植性和互操作性(Windows,Linux,Unix,Mac OS X)

跨架构可移植性和互操作性(x86,x86-64等)

开源

相关推荐:《python本文来源gao@!dai!ma.com搞$$代^@码5网@视频教程》

三、动机

现在,用python编写的软件应用在很多应用程序中,包括业务逻辑,数据分析和科学计算。这与市场上的SMP计算机(多处理器或多核)和集群(计算机通过网络连接)的广泛可用性一起创建了并行执行python代码的需求。

为SMP计算机编写并行应用程序的最简单和常见的方法是使用线程。虽然,如果应用程序是计算绑定使用线程或线程python模块将不允许并行运行python字节码。原因是python解释器使用GIL(全局解释器锁)进行内部记账。这个锁允许一次只执行一个python字节码指令,即使在SMP计算机上。

PP模块克服了这个限制,并提供了一种写并行python应用程序的简单方法。内部ppsmp使用进程和IPC(进程间通信)来组织并行计算。后者的所有细节和复杂性完全被照顾,应用程序只提交作业并检索其结果(写并行应用程序的最简单的方法)。

为了使事情更好,用PP编写的软件并行工作,即使在通过本地网络或Internet连接的许多计算机上。跨平台可移植性和动态负载平衡允许PP即使在异构和多平台集群上也能有效地并行计算。

四、安装

任何平台:下载模块存档并将其解压缩到本地目录。 运行安装脚本:python setup.py install

Windows:下载并执行Windows安装程序二进制文件。

五、例子

import math, sys, timeimport ppdef isprime(n):    """Returns True if n is prime and False otherwise"""    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    max = int(math.ceil(math.sqrt(n)))    i = 2    while i <= max:        if n % i == 0:            return False        i += 1    return Truedef sum_primes(n):    """Calculates sum of all primes below given integer n"""    return sum([x for x in xrange(2,n) if isprime(x)])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"""# tuple of all parallel python servers to connect withppservers = ()#ppservers = ("10.0.0.1",)if len(sys.argv) > 1:    ncpus = int(sys.argv[1])    # Creates jobserver with ncpus workers    job_server = pp.Server(ncpus, ppservers=ppservers)else:    # Creates jobserver with automatically detected number of workers    job_server = pp.Server(ppservers=ppservers)print "Starting pp with", job_server.get_ncpus(), "workers"# Submit a job of calulating sum_primes(100) for execution. # sum_primes - the function# (100,) - tuple with arguments for sum_primes# (isprime,) - tuple with functions on which function sum_primes depends# ("math",) - tuple with module names which must be imported before sum_primes execution# Execution starts as soon as one of the workers will become availablejob1 = job_server.submit(sum_primes, (100,), (isprime,), ("math",))# Retrieves the result calculated by job1# The value of job1() is the same as sum_primes(100)# If the job has not been finished yet, execution will wait here until result is availableresult = job1()print "Sum of primes below 100 is", resultstart_time = time.time()# The following submits 8 jobs and then retrieves the resultsinputs = (100000, 100100, 100200, 100300, 100400, 100500, 100600, 100700)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()

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python做并行计算可以吗

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址