【发布时间】:2016-08-08 04:18:55
【问题描述】:
我正在从单个 python 代码运行多个进程:
代码片段:
while 1:
if sqsObject.msgCount() > 0:
ReadyMsg = sqsObject.readM2Q()
if ReadyMsg == 0:
continue
fileName = ReadyMsg['fileName']
dirName = ReadyMsg['dirName']
uuid = ReadyMsg['uid']
guid = ReadyMsg['guid']
callback = ReadyMsg['callbackurl']
# print ("Trigger Algorithm Process")
if(countProcess < maxProcess):
try:
retValue = Process(target=dosomething, args=(dirName, uuid,guid,callback))
processArray.append(retValue)
retValue.start()
countProcess = countProcess + 1
except:
print "Cannot Run Process"
else:
for i in range(len(processArray)):
if (processArray[i].is_alive() == True):
continue
else:
try:
#print 'Restart Process'
processArray[i] = Process(target=dosomething, args=(dirName,uuid,guid,callback))
processArray[i].start()
except:
print "Cannot Run Process"
else: # No more request to service
for i in range(len(processArray)):
if (processArray[i].is_alive() == True):
processRunning = 1
break
else:
continue
if processRunning == 0:
countProcess = 0
else:
processRunning = 0
在这里,我正在从队列中读取消息并创建一个进程来对该消息运行算法。我设置了 maxProcess 的上限。因此,在达到 maxProcess 后,我想通过检查 is_alive() 来重用不活跃的 processArray 插槽。
此过程对于较少数量的进程运行良好,但是对于大量消息(例如 100 条),内存消耗会超出上限。我认为我通过重用进程槽而泄漏了。
不确定过程中出了什么问题。
提前感谢您发现错误或明智的建议。
【问题讨论】:
标签: python memory-leaks python-multiprocessing