Python - Pool Multiprocessing启动整个程序

时间:2014-02-14 05:49:31

标签: python multiprocessing pycharm python-idle pi

我有一个有趣的问题......

在我的编程课程中,我们刚开始查看随机数字,这激发了我对它们做些什么。长话短说,我做了一个程序,使用随机数来相当准确地计算pi。收集一个结果花了很长时间,所以我决定阅读多处理和汇集。我能够修改我的程序以启动一个单独的并行过程来一次计算4个pis,然后对其进行平均。

嗯,该代码工作正常,直到我将其粘贴到我的实验室文件中(我必须上交)

( - 在PyCharm--) 该程序正常工作,直到它到达多处理部分(具体地说,它映射它)。一旦它命中,它将从头开始完全启动我的程序并运行它(进程数)次。我不确定为什么会发生这种情况,因为在映射它时,我特别只针对我的pi函数及其开始的一切。它本身就可以正常工作。 ??

( - 闲置 - ) 在Idle中,程序将正常工作,除非文件中有任何输入。如果有,程序将冻结,永不关闭。

代码:

from random import randrange
from multiprocessing import Process, Pool, Queue
import time
from time import time
from os import getpid
import multiprocessing

def example():
    print("Function1")
    return

def example2():
    print("Function2")
    return

example()
example2()
#input()




real_pi = 3.14159265359
def pi1(num: int):
    formatStr = 'process id:{} processing pi1({})'
    print(formatStr.format(getpid(),num))
    in_circle=0
    in_square=0
    for k in range(1,num+1):
        x1=randrange(0,10000000000)
        y1=randrange(0,10000000000)
        dis=((5000000000-x1)**2+(5000000000-y1)**2)**0.5
        in_square+=1
        if dis < 5000000000:
            in_circle+=1
    if in_square == 0:
        in_square = 1
    pi = 4*in_circle/in_square
    print ('process id: {} pi= {}'.format(getpid(),pi))
    return pi

if __name__ == '__main__':
    cpus=multiprocessing.cpu_count()
    x=int(cpus/2)
    p = Pool(x)
    starts = [500000,500000,500000,500000]
    t1 = time()
    all_pi = sum(p.map(pi1,starts))
    total = len(starts)
    average = all_pi/total
    t2 = time()
    p.close()
    print("Time taken: {} seconds".format(t2-t1))
    print("Average pi: ", average)
    print((((1-real_pi/average)*100)**2)**.5, "% error")

如果您还有其他问题,请与我们联系。

0 个答案:

没有答案