python 多线程并行加速 for

前一篇文章 里,我借助蒙特卡洛法对圆周率进行了估算,结果还是比较满意的,但是在试算过程中有一个问题很 annoying。更准确的结果需要更多的随机点,更多随机点意味着更大的矩阵计算,而且我在计算收敛情况时,需要多次执行求 pi 函数,但是我的 7700k 在计算时很不慌张,占有率仅在15%附近徘徊。矩阵乘法的并行加速我暂时还没有时间弄清楚,但是 for 的加速还是比较简单的,直接使用 multiprocessing 。代码如下:

import numpy as np
from multiprocessing import Pool # 引用线程池 
def mc_pi(size):
    ran_x = np.random.random([size, size])
    ran_y = np.random.random([size, size])
    is_c = ran_x**2 + ran_y**2
    is_c[is_c > 1] = 0
    pi = 4 * np.count_nonzero(is_c) / (size**2)
    return pi