使用ProcessPoolExecutor统计指定范围内的素数个数
时间: 2023-10-26 13:07:38 浏览: 67
判断特定范围内的素数c#
4星 · 用户满意度95%
以下是使用ProcessPoolExecutor计算指定范围内素数的示例代码:
```python
import concurrent.futures
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
def count_primes(start, end):
count = 0
for i in range(start, end):
if is_prime(i):
count += 1
return count
if __name__ == '__main__':
start = 2
end = 1000000
num_processes = 4
with concurrent.futures.ProcessPoolExecutor(max_workers=num_processes) as executor:
chunk_size = (end - start) // num_processes
futures = []
for i in range(num_processes):
chunk_start = start + i * chunk_size
chunk_end = start + (i + 1) * chunk_size if i < num_processes - 1 else end
futures.append(executor.submit(count_primes, chunk_start, chunk_end))
total_count = sum(f.result() for f in futures)
print(f'Total number of primes between {start} and {end}: {total_count}')
```
在这个示例中,我们定义了两个函数。`is_prime`函数检查给定的整数是否为素数。`count_primes`函数接受两个参数`start`和`end`,并计算在这个范围内的素数的数量。
在主程序中,我们定义了`start`和`end`变量来指定要计算的范围,以及`num_processes`变量来指定要使用的进程数。我们使用`ProcessPoolExecutor`类创建一个进程池,然后将工作分成多个块,并将每个块交给一个进程处理。每个进程在其分配的块上调用`count_primes`函数,并返回其结果。在所有进程完成后,我们将各个结果相加以得出总素数的数量。
在这个示例中,我们使用了`submit`方法来提交每个进程的工作,并将返回的`Future`对象存储在列表中。然后,我们使用`result`方法来获取每个`Future`对象的结果,并将它们相加以得出总结果。我们还使用了`max_workers`参数来指定要使用的最大进程数。如果不指定,`ProcessPoolExecutor`将使用CPU的所有核心。
这个示例展示了如何使用`ProcessPoolExecutor`来并行计算素数。它可以轻松地扩展到更大的范围和更多的进程。
阅读全文