3

我正在尝试从 Telnet 和 SSH 主机获取某些命令的输出并将它们存储在架子中。由于有很多命令,我正在使用多处理。我有以下重要方法:

  1. connectToHost:使用方法建立连接(SSH/ Telnet)。
  2. ExecuteCommand:执行命令并获取输出。
  3. main:我在其中迭代所有命令并使用multiprocessing. 这个方法调用另一个方法来合并来自其他进程的输出。

对于 Telnet,一切正常,但是当它是 SSH 连接时,我的代码失败了process.start(),我收到了以下错误。

TypeError:无法腌制 CompiledFFI 对象

为什么即使我调用相同的方法它也不适用于 SSH?如何解决这个问题?

4

1 回答 1

0

当您启动一个新进程时,python 必须传递用于该进程的所有变量。在这种情况下,它是与某个主机的连接。为了做到这一点,必须对变量进行序列化(腌制)。

看起来 paramiko 使用FFI对象不能被腌制。

可以通过将多处理更改为多线程(不需要pickle)或从一开始就在每个进程中创建ssh连接(这可能不是那么有效)来解决问题。

于 2020-02-28T11:36:09.533 回答