如何确定给定port = 0时aiohttp选择哪个端口

时间:2017-06-17 23:44:18

标签: python aiohttp

当我使用aiohttp.web.run_app(. . ., port=0)时,我假设它选择了一个可供服务的任意可用端口。它是否正确?如果是这样,是否有某种方法可以找出选择的端口?

1 个答案:

答案 0 :(得分:2)

您使用server.sockets,如下面的代码所示:

@asyncio.coroutine
def status(request):
    """Check that the app is properly working"""
    return web.json_response('OK')


app = web.Application()  # pylint: disable=invalid-name
app.router.add_get('/api/status', status)


def main():
    """Starts the aiohttp process to serve the REST API"""
    loop = asyncio.get_event_loop()
     # continue server bootstraping
    handler = app.make_handler()
    coroutine = loop.create_server(handler, '0.0.0.0', 0)
    server = loop.run_until_complete(coroutine)
    print('Serving on http://%s:%s' % server.sockets[0].getsockname()) # HERE!
    try:
        loop.run_forever()
    except KeyboardInterrupt:
        pass
    finally:
        server.close()
        loop.run_until_complete(server.wait_closed())
        loop.run_until_complete(handler.finish_connections(1.0))
        loop.close()