2016-08-04 5 views
1

Я использую Fabric с параллельным декоратора, как так:Python - Ткань не более 10 параллельных соединений SSH

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 

Я попытался увеличить MaxSessions и MaxStartups в /etc/ssh/sshd_config, но я не мог бы понять эти установки (I я чувствую, что они устанавливают лимиты на входящие SSH-соединения вместо исходящих).

Есть ли системный предел, который мне нужно увеличить, чтобы иметь более 10 открытых SSH-соединений?

переферия (нет ответов): python fabric parallel pool restrictions

ответ

1

get_pool_size метод в классе fabric.tasks.Task немного запутанным, пытаясь угадать, не слишком большой pool_size. Он возвращает целое число после выбора значений из глобальной конфигурации, конфигурации задачи, значения по умолчанию, количества хостов.

По моему прочтению, он должен вернуть минимальный номер_и_хоста и значение, которое вы настраиваете в своем декораторе parallel.

Возможно, вы могли бы использовать этот метод только перед запуском задачи. Возможно, декодер «unittest.mock.patch» Python может сделать из этого более красивую работу, но он несколько сложный, и у меня есть не знаю, как он будет взаимодействовать с самим параллельным декоратором.

Так, только обезьяна патч get_pool_size вернуть 100 в начале файла, и он должен работать:

import fabric.tasks 

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

... 
+0

Это может работать, но производительность даже одной сессии в ткани плачевно, никогда не возражаю с 100 Используйте инструмент, который подходит для задачи, а какая - нет. – danny