import time from multiprocessing import Process from multiprocessing import Manager def sum_range(start, end): total = 0 for i in range(start, end): total += i return total class MyProcess(Process): def __init__(self,st, end, result): self.st = st self.end = end self.result = result super().__init__() def run(self) -> None: total = 0 for i in range(self.st, self.end): total += i self.result.append(total) if __name__ == '__main__': start_time = time.time() manager = Manager() result = manager.list() t1 = MyProcess(1, 50000001,result) t2 = MyProcess(50000001,100000001,result) t1.start() t2.start() t1.join() t2.join() total = sum(result) end_time = time.time() print("并行总和为:", total) print("并行用时:", end_time - start_time, "秒") start_time = time.time() total = sum_range(1,100000001) end_time = time.time() print("串行总和为:", total) print("串行用时:", end_time - start_time, "秒")
时间: 2023-11-12 21:09:03 浏览: 77
这段代码使用了 Python 的 multiprocessing 模块来实现并行计算一个范围内的整数和。它首先定义了一个 sum_range 函数,该函数接受两个参数 start 和 end,然后使用一个 for 循环计算这个范围内所有整数的和,并返回结果。然后它定义了一个名为 MyProcess 的子类,该类继承自 multiprocessing.Process 类,它重写了 run 方法来计算给定范围内的整数和,并将结果存储在一个共享列表中。在主函数中,它使用 multiprocessing.Manager 类来创建共享列表,然后启动两个 MyProcess 实例来并行计算整数和。最后,它计算并打印串行和并行计算的总和和用时。
相关问题
import time import multiprocessing from multiprocessing import Manager def sum_range(start, end, result): total = 0 for i in range(start, end): total += i result.append(total) if __name__ == '__main__': start_time = time.time() manager = Manager() result = manager.list() t1 = multiprocessing.Process(target=sum_range,args=(1, 50000001, result)) t2 = multiprocessing.Process(target=sum_range, args=(50000001, 100000001, result)) t1.start() t2.start() t1.join() t2.join() total = sum(result) end_time = time.time() print("并行总和为:", total) print("并行用时:", end_time - start_time, "秒") start_time = time.time() result = [] sum_range(1,100000001,result) end_time = time.time() print("串行总和为:", result[0]) print("串行用时:", end_time - start_time, "秒")
这是一个使用 Python 的 multiprocessing 模块实现并行计算的例子,其中定义了一个函数 sum_range(start, end, result),用于计算从 start 到 end 的整数之和,并将结果存储在 result 中。在主程序中,使用了 multiprocessing.Manager() 方法创建了一个共享内存的列表对象 result,然后启动了两个进程分别计算前半部分和后半部分的整数之和,并将结果存储在 result 中。最后,使用 sum() 函数计算并行计算的结果,并输出并行计算和串行计算的总和和用时。
需要注意的是,由于使用了共享内存对象,因此在多进程中对 result 的操作需要进行同步,否则可能会出现竞争条件和数据不一致的问题。在这个例子中,由于使用了 multiprocessing.Manager() 方法创建的共享内存对象,因此可以直接使用 append() 方法将计算结果添加到 result 中,而无需进行额外的同步操作。
阅读全文