【问题标题】:TypeError: can't pickle CompiledFFI objectsTypeError:无法腌制 CompiledFFI 对象
【发布时间】:2019-03-12 21:53:19
【问题描述】:

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

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

对于 Telnet,一切正常,但是当它是 SSH 连接时,我的代码在 process.start() 处失败,并且出现以下错误。

TypeError: can't pickle CompiledFFI objects

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

【问题讨论】:

    标签: python-3.x pickle paramiko multiprocess pathos


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-14
      相关资源
      最近更新 更多