python 多进程练习

题目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()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zcx1203/article/details/82800743