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飞起吧~
时间: 2024-10-06 00:45:01