我正在尝试从Telnet和SSH主机获取某些命令的输出,并将它们存储在架子中。由于命令很多,因此我正在使用多处理。 我有以下重要方法:
connectToHost
:使用一种方法建立连接(SSH / Telnet)。ExecuteCommand
:执行命令并获取输出。main
:我在其中遍历所有命令,并使用multiprocessing
在字典中获取输出。此方法调用另一个方法,该方法合并其他进程的输出。对于Telnet,一切正常,但是当它是SSH连接时,我的代码在process.start()
处失败,并且出现以下错误。
TypeError:无法腌制CompiledFFI对象
为什么即使我调用相同的方法,它也不能用于SSH?该如何解决?
答案 0 :(得分:0)
启动新进程时,python必须传递该进程使用的所有变量。在这种情况下,它是到某个主机的连接。为此,必须对变量进行序列化(腌)。
paramiko似乎使用FFI不能腌制的对象。
可以通过将多处理更改为多线程(不需要棘手)或通过从一开始就在每个进程中创建ssh连接来解决问题(这可能不太有效)。