我有一个有趣的问题。。。在
在我的编程课上,我们刚开始复习随机数,这启发了我用它们做些什么。长话短说,我做了一个程序,用随机数计算π相当准确。收集一个结果需要很长时间,所以我决定阅读多处理和池。我可以修改我的程序,启动一个单独的并行进程,一次计算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")
如果您还有其他问题,请告诉我。在
目前没有回答
相关问题 更多 >
编程相关推荐