paramiko在使用多处理时挂起_get_channel

时间:2015-04-06 22:39:50

标签: python ssh paramiko python-multiprocessing

我有以下代码(使用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()部分。可能是什么原因?

1 个答案:

答案 0 :(得分:1)

当在另一个进程中建立连接时,会发生的情况是子进程获取与该通道关联的套接字的副本。发生的事情是我们得到两个对象试图与单个套接字通信并且会话被破坏。这里解释一下 Paramiko Sessions Closes Transport in the Child Process 和这里 https://github.com/paramiko/paramiko/issues/446