我有以下代码(使用paramiko编写),在多处理过程中调用
def traffic(q, e):
e.open()
def open()
assert self.closed
self._channel = self._get_channel()
self.stdin = io.TextIOWrapper(CommandStdIn(self._channel))
self.stdout = self._channel.makefile()
self.stderr = self._channel.makefile_stderr()
q = Queue()
p = Process(target = self.traffic, args = (q, other_args))
p.start()
p.join()
没有多处理,这很好用。但是通过多处理,它会停在
%paramiko.transport-WARNING: Success for unrequested channel! [??]
%paramiko.transport-ERROR: Channel request for unknown channel 19
它挂在self._get__channel()
部分。可能是什么原因?
答案 0 :(得分:1)
当在另一个进程中建立连接时,会发生的情况是子进程获取与该通道关联的套接字的副本。发生的事情是我们得到两个对象试图与单个套接字通信并且会话被破坏。这里解释一下 Paramiko Sessions Closes Transport in the Child Process 和这里 https://github.com/paramiko/paramiko/issues/446