我正在使用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连接?
答案 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
...