【问题标题】:Python - Fabric maximum 10 parallel SSH connectionsPython - Fabric 最多 10 个并行 SSH 连接
【发布时间】:2016-08-05 21:53:08
【问题描述】:

我将Fabric 与并行装饰器一起使用,如下所示:

parallel(pool_size=100)
def mytask():
    # do work

我希望该程序能够打开 100 个不同的 SSH 连接并在所有这些服务器上并行运行 Fabric 任务。

但是,监控数量或打开的 SSH 连接总是给我平均 10 个。我在一个足够强大的 CentOS 实例上运行。

我正在获取并发传出 SSH 连接的数量:

sudo netstat -atp | grep "/python"  | grep 10. | grep ssh | wc -l

我尝试在/etc/ssh/sshd_config 中增加 MaxSessionsMaxStartups,但我可能不了解这些设置(我觉得这些是对传入 SSH 连接而不是传出设置的限制。

是否需要提高系统限制才能拥有超过 10 个打开的 SSH 连接?

相关(无答案): python fabric parallel pool restrictions

【问题讨论】:

标签: python ssh fabric


【解决方案1】:

fabric.tasks.Task 类中的get_pool_size 方法有点复杂,试图猜测一个不太大的pool_size。在从全局配置、任务配置、默认传递的值、主机数中选择值后,它返回一个整数。

根据我的阅读,它应该返回 number_of_hosts 的最小值和您在 parallel 装饰器中配置的值。

也许你可以在运行任务之前“强力”修补该方法 - 也许 Python 的“unittest.mock.patch”装饰器可以做得更好 - 但它有点复杂,我没有了解它如何与并行装饰器本身交互。

所以,只需猴子补丁 get_pool_size 在文件开头返回 100,它应该可以工作:

import fabric.tasks

fabric.tasks.Task.get_pool_size = lambda self: 100

...

【讨论】:

  • 这可能行得通,但即使在织物中使用一个会话的性能也很糟糕,更不用说使用 100 次了。使用适合任务的工具,而织物不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-04
  • 2018-12-16
  • 2011-07-29
  • 2011-06-21
  • 2015-08-10
相关资源
最近更新 更多