Проблема с многопроцессорной обработкой в ​​python [OSError: [WinError 6] Неверный драйвер] - PullRequest
1 голос
/ 07 мая 2019

Прежде всего, я прошу прощения за мой английский.

Я реализовал игру в карты на python. Мне нужно создать несколько процессов, которые запускают функцию generarArbol параллельно. Они создаются в начале игры, и каждый раз, когда агенту приходится играть, он отправляет каждому процессу сообщение, используя трубу для создания другого дерева.

def play(self, table, canticos, cartasConocidas):
    if self.n_baza == 0:
        time = 1500 #tiempo maximo que se ejecutara cada proceso
        manager = Manager()
        self.nProcesos = multiprocessing.cpu_count()*4 #numero de procesos a crear, dependiendo de los cores de la maquina, 4 procesos por nucleo
        self.procesos = []
        self.mejores = manager.Queue()
        for _ in range(self.nProcesos):
            server, client = Pipe(duplex=False)
            p = Process(target=self.generarArbol, args=(time, server, self.name, self.nameA, self.nameB, self.mejores,)) #se crear el proceso con sus atributos
            p.daemon = True
            self.procesos.append(client) #lo incluimos en la lista de pipes
            p.start() #ejecutamos el proceso
    matriz = self.cards_matrix.returnInstance(self.n_baza, table) #se crea una instancia de la matriz aleatoria

    for s in self.procesos:
        s.send([copy(matriz), copy(table), copy(self.n_baza)]) #se reanudan los procesos y se ejecutan los arboles


def generarArbol(self, time, server, name, nameA, nameB, mejores):
    from Clases.MCTS_TuteState import TuteState
    while True:
        [matriz, table, n_baza] = server.recv() #espera hasta recibir mensaje
        initialState = TuteState(matriz, table, n_baza, name, nameA, nameB)
        arb = mcts(timeLimit=time)
        carta = arb.search(initialState=initialState)
        mejores.put(carta)

Проблема в том, что эта ошибка появляется в каждом из процессов, когда я ее выполняю:

Exception ignored in: <function _ConnectionBase.__del__ at 0x128F14B0>
Traceback (most recent call last):
  File "C:\Users\litoi\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\connection.py", line 132, in __del__
    self._close()
  File "C:\Users\litoi\AppData\Local\Programs\Python\Python37-32\lib\multiprocessing\connection.py", line 277, in _close
    _CloseHandle(self._handle)
OSError: [WinError 6] Controlador no válido

Я думаю, что это о Трубе. Я думал, что это проблема Windows, но я попробовал это в Ubuntu, и это также выдает ту же ошибку. Я не понимаю, почему.

Привет.

...