Я пытаюсь использовать многопроцессорность 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()