利用多进程
现在,让我们使用多进程来加速计算。Python 中的多进程允许执行多个进程,这些进程可以在不同的 CPU 核心上运行,从而减少 CPU 密集型任务所需的总时间。
在 ~/project
目录下打开一个名为 process_prime.py
的文件,其内容如下:
from multiprocessing import Process
import math
def is_prime(num):
"""
检查一个数是否为质数。
"""
if num <= 1:
return False
for i in range(2, int(math.sqrt(num)) + 1):
if num % i == 0:
return False
return True
def compute_primes(start, end):
"""
计算给定范围内的质数。
"""
prime_numbers = [num for num in range(start, end) if is_prime(num)]
print(f"范围 {start}-{end} 内的质数: {prime_numbers}")
processes = []
## 创建两个进程
for i in range(0, 20000, 10000):
## 创建一个新进程,目标是 compute_primes 函数,并将范围作为参数传递
p = Process(target=compute_primes, args=(i, i+10000))
processes.append(p)
## 启动进程
p.start()
## 等待所有进程完成
for p in processes:
p.join()
print("质数计算完成!")
在终端中执行该脚本:
python process_prime.py
这将输出在指定范围内找到的质数,并显示完成消息:
范围 0-10000 内的质数: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241,
......
9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973]
范围 10000-20000 内的质数: [10007, 10009, 10037, 10039, 10061, 10067, 10069, 10079, 10091, 10093, 10099, 10103, 10111, 10133, 10139, 10141, 10151, 10159, 10163, 10169, 10177, 10181, 10193,
......
19739, 19751, 19753, 19759, 19763, 19777, 19793, 19801, 19813, 19819, 19841, 19843, 19853, 19861, 19867, 19889, 19891, 19913, 19919, 19927, 19937, 19949, 19961, 19963, 19973, 19979, 19991, 19993, 19997]
质数计算完成!