如何判断python光纤连接是否已准备好?

问题描述 投票:0回答:1

我有一个脚本,该脚本创建AWS实例并使用fabric == 2.5.0对其进行配置。这是我在脚本中使用fabric2 Connection实例的问题:

def setup_site(self, ip, name):
    connection = Connection(ip, user='toolman')
    # If I put ipdb here, just continuing it will work.
    # If take the debug line out, it will fail
    # with "NoValidConnectionsError: [Errno None] Unable to connect to port 22 on ..."
    # import ipdb; ipdb.set_trace()
    connection.put(self.create_setup_file(name), 'setup.yaml')

我可以点击'c'继续调试器,并且每次都能正常工作。如果我没有调试器行,则每次connection.put调用都会失败,并显示“ NoValidConnectionsError:[Errno None]无法连接到...上的端口22”。

放置文件的AWS实例正在运行(instance.wait_until_running()在调用setup_site的代码中返回)。

python amazon-web-services amazon-ec2 fabric
1个回答
0
投票

如果我将python睡眠30秒钟,则一切正常,因此此问题可能在AWS实例中尚未解决。

[connection.open()不需要,但有时可能会工作,因为它需要时间。

我最终使用以下函数代替了Connection调用:

def ensure_connection(*connection_args, ensure_connection_timeout=30, **connection_kwargs):
    start = timer()
    while (timer() - start) < ensure_connection_timeout:
        try:
            connection = Connection(*connection_args, **connection_kwargs)
            connection.open()
            return connection
        except NoValidConnectionsError as e:
            connection_error = e
    # noinspection PyUnboundLocalVariable
    raise connection_error
© www.soinside.com 2019 - 2024. All rights reserved.