Python - Fabric最多10个并行SSH连接

时间:2016-08-04 23:38:15

标签: python ssh fabric

我正在使用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中增加 MaxSessions MaxStartups ,但我可能还没有理解那些设置(我觉得这些是对 传入 SSH连接而不是传出的设置限制。)

我是否需要增加一个系统限制才能拥有超过10个开放的SSH连接?

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

1 个答案:

答案 0 :(得分:2)

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

...