您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

为什么在加载模块时使用Paramiko挂起?

为什么在加载模块时使用Paramiko挂起?

Paramiko使用单独的线程进行基础传输。您 永远不会一个模块会由于导入而产生线程。据我了解,这里只有一个导入锁,因此,当模块中的子线程尝试另一次导入时,它可能会无限期地阻塞,因为您的主线程仍然持有该锁。(可能还有其他我也不知道的陷阱)

通常,模块在导入时不应有任何种类的副作用,否则您将获得不可预测的结果。只需用这个__name__ == '__main__'技巧推迟执行,就可以了。

[编辑]我似乎无法创建一个简单的测试用例来重现此死锁。我仍然认为这是导入的线程问题,因为auth代码正在等待永远不会触发的事件。这可能是paramiko或python中的错误,但是好消息是,如果做正确的事,就永远不要看到它;)

这是一个很好的例子,为什么您总是要最大程度地减少副作用,并且为什么函数式编程技术变得越来越普遍。

其他 2022/1/1 18:35:37 有223人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶