题目1: 计算1~100000之间所有素数和, 要求如下:
- 编写函数判断一个数字是否为素数,
- 使用内置函数sum()统计所有素数和。
- 对比1: 对比使用多进程和不使用多进程两种方法的速度。
- 对比2:对比开启4个多进程和开启10个多进程两种方法的速度。
import multiprocessing
from mytimeit import timeit
def isPrime(n):
if n <= 1:
return False
for i in range(2,int(n)):
if n % i == 0:
return False
return True
def ifprime(i):
if isPrime(i):
return True
@timeit
def no_multi_process():
prime = []
for i in range(1,100001):
if ifprime(i):
prime.append(i)
sum(prime)
class prime2(multiprocessing.Process):
def __init__(self,prime,a,b):
super(prime2, self).__init__()
self.prime =prime
self.a =a
self.b = b
def run(self):
for i in range(self.a,self.b):
if ifprime(i):
self.prime.append(i)
sum(self.prime)
@timeit
def use_multi_process():
prime = []
processes = []
for i in range(1,100001,25000):
f = prime2(prime,i,i+25000)
f.start()
processes.append(f)
[process.join() for process in processes]
if __name__=='__main__':
no_multi_process()
use_multi_process()
import multiprocessing
from mytimeit import timeit
def isPrime(n):
if n <= 1:
return False
for i in range(2,int(n)):
if n % i == 0:
return False
return True
def ifprime(i):
if isPrime(i):
return True
# @timeit
# def no_multi_process():
# prime = []
# for i in range(1,100001):
# if ifprime(i):
# prime.append(i)
# sum(prime)
class prime2(multiprocessing.Process):
def __init__(self,prime,a,b):
super(prime2, self).__init__()
self.prime =prime
self.a =a
self.b = b
def run(self):
for i in range(self.a,self.b):
if ifprime(i):
self.prime.append(i)
sum(self.prime)
@timeit
def use4_multi_process():
prime = []
processes = []
for i in range(1,100001,25000):
f = prime2(prime,i,i+25000)
f.start()
processes.append(f)
[process.join() for process in processes]
@timeit
def use10_multi_process():
prime = []
processes = []
for i in range(1,100001,10000):
f = prime2(prime,i,i+10000)
f.start()
processes.append(f)
[process.join() for process in processes]
if __name__=='__main__':
use4_multi_process()
use10_multi_process()