Python - сохранить результаты многопроцессорной обработки, получить ошибку [Errno 32] Broken pipe - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь использовать многопроцессорность Python для выбора лучших комбинаций переменных для регрессионной модели. Ниже приведен код, который я использовал для многопроцессорной обработки. Выход из функции model_selection представляет собой список.

Я использую Python 3.7. И я запускаю код в приглашении Anaconda.

from multiprocessing import Queue
from multiprocessing import Process

success_model = []

if __name__ == "__main__":   
    q = Queue()
    vl_mp = []
    for i in range(0, len(var_list_all), 1000):
        vl_mp.append(var_list_all[i: i + 1000]) 
    procs = []

    # instantiating process with arguments
    for i in range(len(vl_mp)): #range of (0, 6)
        proc = Process(target=model_selection, args=(vars, vl_mp[i], vars_lookup, q, None, True,))
        procs.append(proc)
        proc.start()    

    # collect output from queue
    for i in range(len(vl_mp)):
        success_model += q.get()        

    # complete the processes
    for proc in procs:
        proc.join()


    success_model = sorted(success_model, key = lambda x: x[1], reverse = True)

У меня по-прежнему ошибка BrokenPipeError: [Errno 32] Broken pipe. Кто-нибудь знает почему? Я пробовал ответы, такие как

q.close()
q.join_thread()

или

time.sleep(0.1)

из Как получить выходные данные из многопроцессорной обработки в Python? . Но они не работают.

После построчного тестирования кода, похоже, ошибка появляется в строке: proc.start()

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