Python Multiprocessing Process.start () не работает в Windows, работает в Linux - PullRequest
0 голосов
/ 01 января 2019

У меня есть некоторый код, который отправляет вызовы методов, используя Pipes, чтобы разрешить независимую работу.Я протестировал этот код для работы в Linux, но не могу заставить его работать в Windows, и я не вижу ничего в документации по Python, объясняющей несоответствие.

def initialize(model):
    # Fork a subprocess for each key: (spectra, order)
    pconns = {} # Parent connections
    cconns = {} # Child connections
    ps = {} # Process objects
    # Create all of the pipes
    for spectrum_key in spectra_keys:
        for order_key in order_keys:
            pconn, cconn = Pipe()
            key = (spectrum_key, order_key)
            pconns[key], cconns[key] = pconn, cconn
            p = Process(target=model.brain, args=(cconn,))
            p.start()
            ps[key] = p
    return (pconns, cconns, ps)

, где model.brain выглядит так -

 def brain(self, conn):
    '''
    The infinite loop of the subprocess, which continues to listen for
    messages on the pipe.
    '''
    alive = True
    while alive:
        #Keep listening for messages put on the Pipe
        alive = self.interpret(conn)
        #Once self.interpret() returns `False`, this loop will die.
    conn.send("DEAD")

В Linux это работает нормально, и мой код работает, как и ожидалось.В Windows 10 с Python 3.6.2 через Anaconda я получаю

TypeError: can't pickle _thread.RLock objects

при попытке вызвать p.start() в функции initialize.

...