У меня есть некоторый код, который отправляет вызовы методов, используя 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
.