Python 用于计算pi的多处理代码永不结束

Python 用于计算pi的多处理代码永不结束,python,multiprocessing,pi,Python,Multiprocessing,Pi,我想计算π。程序很简单: 做一个1x1的正方形,并在正方形中画一个圆。然后除以4 取两个随机值(x,y) 如果x2+y2≤ 比圆中的点多1 重复上述N次 计算内部点(我称之为K)并除以所有执行次数,然后乘以4。(4*K/N==Pi) 迭代次数越多,计算越精确 为了实现快速,我使用了多处理库。但是多处理代码永远不会完成。有什么问题吗 import timeit start = timeit.default_timer() import random from multiprocessing im

我想计算π。程序很简单:

  • 做一个1x1的正方形,并在正方形中画一个圆。然后除以4
  • 取两个随机值(x,y)
  • 如果x2+y2≤ 比圆中的点多1
  • 重复上述N次
  • 计算内部点(我称之为K)并除以所有执行次数,然后乘以4。(4*K/N==Pi)
  • 迭代次数越多,计算越精确

    为了实现快速,我使用了多处理库。但是多处理代码永远不会完成。有什么问题吗

    import timeit
    start = timeit.default_timer()
    
    import random
    from multiprocessing import Pool
    
    N = 1000000
    process_num = 4
    
    def make_pi(end):
        count_inbound = 0
        for x in range(end):
            the_x = random.random()
            the_y = random.random()
            if((the_x**2 + the_y**2) <= 1):
                count_inbound += 1
        return count_inbound
    
    # Multiprocessing.
    p = Pool(processes = process_num)
    count_in = p.map(make_pi, [N/process_num for x in range(process_num)])
    print(4*sum(count_in)/N)
    
    # Normal.
    ##print(4*make_pi(N)/N)
    
    stop = timeit.default_timer()
    print(stop - start)
    
    import timeit
    start=timeit.default\u timer()
    随机输入
    来自多处理导入池
    N=1000000
    进程数=4
    def make_pi(结束):
    入站计数=0
    对于范围内的x(结束):
    _x=random.random()
    _y=random.random()
    
    如果((x**2+y**2)我已经在我的mac上测试了相同的代码。 它很好用

    多工序为0.25,单工序为0.45

    换衣服

    [N/process\u num用于范围内的x(process\u num)]

    [int(N/process\u num表示范围内的x(process\u num)]
    自动回答

    问题是流程需要关闭

    所以我只加了一行

    if __name__ == "__main__":
    
    比我的代码还管用

    import timeit
    start = timeit.default_timer()
    
    import random
    from multiprocessing import Pool
    
    N = 1000000
    process_num = 4
    
    def make_pi(end):
        count_inbound = 0
        for x in range(end):
            the_x = random.random()
            the_y = random.random()
            if((the_x**2 + the_y**2) <= 1):
                count_inbound += 1
        return count_inbound
    
    if __name__ == "__main__":
        #multiprocessing code
        p = Pool(processes = process_num)
        count_in = p.map(make_pi, [int(N/process_num) for x in range(process_num)])
        print(4*sum(count_in)/N)
    
        #normal code
        #print(4*make_pi(N)/N)
    
        stop = timeit.default_timer()
        print(stop - start)
    
    import timeit
    start=timeit.default\u timer()
    随机输入
    来自多处理导入池
    N=1000000
    进程数=4
    def make_pi(结束):
    入站计数=0
    对于范围内的x(结束):
    _x=random.random()
    _y=random.random()
    
    如果((x**2+y**2)您遇到运行时错误:
    运行时错误:在当前进程完成引导阶段之前,已尝试启动新进程。
    我在window10环境中,我的代码在无限循环中。您的解决方案中也存在同样的问题。