gpt4 book ai didi

python - 当进程数增加时多进程挂起

转载 作者:太空宇宙 更新时间:2023-11-04 03:59:05 24 4
gpt4 key购买 nike

我正在尝试理解 python 中的多处理。

我制作了一个测试程序,可以从一组列表中找到最大数量。它适用于有限数量的进程,但在某些时候,如果我将数量增加到 5000 个进程,程序就会挂起。

我做错了什么吗?如果我增加进程数,为什么它会挂起?

这是我的代码:

from  multiprocessing import Process, Manager
import numpy.random as npyrnd

def getMaxRand(_num, shared_dict):
'''
create a list of random numbers
picks max from list
'''
print 'starting process num:', _num
rndList = npyrnd.random(size= 100)
maxrnd = max(rndList)
print 'ending process:', _num
shared_dict[_num] = maxrnd



if __name__ == '__main__':
processes = []
manager = Manager()
shared_dict= manager.dict()
for i in range(50): #hangs when this is increased to say 5000
p = Process(target=getMaxRand, args=( i, shared_dict))
processes.append(p)
for p in processes:
p.start()
for p in processes:
p.join()


print shared_dict

编辑:阅读了一些回复后,很明显我不能随意创建许多进程,并希望多处理库为我排队。所以我的后续问题是如何确定我可以同时运行的最大进程数?

最佳答案

我设法克服了挂起 PC 的大量进程。它似乎适用于相当多的进程(我测试了多达 50000 个)

我是这样解决问题的:

from  multiprocessing import  Pool
import numpy.random as npyrnd


full_result = {}

def getMaxRand(_num):
'''
create a list of random numbers
picks max from list
'''
print 'starting process num:', _num
rndList = npyrnd.random(size= 100)
maxrnd = max(rndList)
print 'ending process:', _num

return (_num, maxrnd)

def accumulateResults(result):
print 'getting result' , result
full_result[result[0]] = result[1]

def doProcesses():
pool = Pool(processes=8)
for i in range(5000): #if I increase this number will it crash?
pool.apply_async(getMaxRand, args=( i, ), callback=accumulateResults)
pool.close()
pool.join()



if __name__ == '__main__':
doProcesses()
print 'FINAL:', full_result

感谢@mgilson 和@Kylo 为我指明了这个方向。

关于python - 当进程数增加时多进程挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16656652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com