码迷,mamicode.com
首页 > 编程语言 > 详细

python并行计算的简单实现--pp

时间:2015-06-07 13:54:55      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:python   并行计算   pp   多线程   编程   

python多线程最出名的是 mutilprocessing (mp) 然而我推荐一个第三方的包, 它的实现比mp 简单地多, 只需要一句话

job = job_server.submit(function, (paras,), (called-functions,), (imports,))

非常容易理解,
1. function是你需要并行计算的函数,
2. paras是实参,
3. called-functions 是function中调用的其他函数, 如果没有, 则不填.
4. imports 是这个function中调用的库

下面我演示一个并行计算n以内所有质数加和,

1. 建立服务器

ppservers = ()
job_server = pp.Server(ppservers=ppservers)

这里, 你的电脑有几个CPU, 它就会建立几台服务器
通过下面代码可以获取CPU个数:

job_server.get_ncpus()
#8

比如我的是8个

2. 构造需要并行计算的函数

def 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 True

def sum_primes(n):
    """Calculates sum of all primes below given integer n"""
    return sum([x for x in xrange(2,n) if isprime(x)])

3. 提交任务给服务器进行计算

import pp
inputs = (100000, 100100, 100200, 100300, 100400, 100500, 100600, 100700,100800)
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()

结束语

如果你想比较并行计算和正常python的效率, 有两个办法可以实现

1. python time库
 import sys, time
 start_time = time.time()

print "Time elapsed: ", time.time() - start_time, "s"
2. pp自带效率统计函数
job_server.print_stats()

好了, 现在用pp让你的python飞起吧~

python并行计算的简单实现--pp

标签:python   并行计算   pp   多线程   编程   

原文地址:http://blog.csdn.net/qq_21970857/article/details/46399869

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!