Paramiko使用单独的线程进行基础传输。您 永远不会 有一个模块会由于导入而产生线程。据我了解,这里只有一个导入锁,因此,当模块中的子线程尝试另一次导入时,它可能会无限期地阻塞,因为您的主线程仍然持有该锁。(可能还有其他我也不知道的陷阱)
通常,模块在导入时不应有任何种类的副作用,否则您将获得不可预测的结果。只需用这个__name__ == '__main__'
技巧推迟执行,就可以了。
[编辑]我似乎无法创建一个简单的测试用例来重现此死锁。我仍然认为这是导入的线程问题,因为auth代码正在等待永远不会触发的事件。这可能是paramiko或python中的错误,但是好消息是,如果做正确的事,就永远不要看到它;)