Процессы Python не запускаются - PullRequest
0 голосов
/ 03 июля 2018

Я запускаю следующий блок кода в моем приложении. Во время работы с 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

1 Ответ

0 голосов
/ 03 июля 2018

Чтобы избежать «неожиданного выхода», возможно, попробуйте игнорировать исключение с помощью

try:
    your_loop()
except:
    pass

Затем добавьте несколько журналов, чтобы отследить основную причину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...