Я запускаю следующий блок кода в моем приложении. Во время работы с python3.4 у меня на экране появляется всплывающее окно «неожиданно завершился python». Данные, отсутствующие в файле aOut, предназначены для нескольких итераций и разбиты на куски. Скажем, 0-1000 элементов в списке отсутствуют, а другие имеют данные. Остальные предметы работают без помех самостоятельно.
При использовании python2.7 ошибки относятся к элементам ~ 3400-4400 в списке.
При ведении журнала я вижу, что вызов обнаружения () не выполняется для процессов с 0-1000 (т. Е. Вызовы process.start () не вызывают метод обнаружения.
Я делаю это на MAC OS Sierra. Что здесь происходит? Есть ли лучший способ достичь моей цели?
def detectInBatch (aList, aOut):
#iterate through the objects
processPool = []
pthreadIndex = 0
pIndex = 0
manager = Manager()
dict = manager.dict()
outline = ""
print("Threads: ", getMaxThreads()) # max threads is 20
for key in aList:
print("Key: %s, pIndex: %d"%(key.key, pIndex))
processPool.append(Process(target=detect, args=(key.key, dict)))
pthreadIndex = pthreadIndex + 1
pIndex = pIndex + 1
#print("Added for %d" %(pIndex))
if(pthreadIndex == getMaxThreads()):
print("ProcessPool size: %d" %len(processPool))
for process in processPool:
#print("Started")
process.start()
#end for
print("20 Processes started")
for process in processPool:
#print("Joined")
process.join()
#end for
print("20 Processes joined")
for key in dict.keys():
outline = outline + dict.get(key)
#end for
dict.clear()
pthreadIndex = 0
processPool = []
#endif
#endfor
if(pthreadIndex != 0):
for process in processPool:
# print("End Start")
process.start()
#end for
for process in processPool:
# print("End done")
process.join()
#end for
for key in dict.keys():
print ("Dict: " + dict.get(key))
outline = outline + dict.get(key)
#end for
#endif
aOut.write(outline)
#end method detectInBatch