如何在 WSGI 服务器上使用 dynamic/adhoc 服务器监听套接字?

How to use dynamic/adhoc server listening socket with WSGI servers?

我想部署一个 Python 应用程序,然后可以在 127.0.0.1/::1 上的任何端口上启动一个内部网络服务器。然后它应该启动一个 Web 浏览器,其中 URL 指向本地 adhoc Web 服务器。

我现在的问题是:是否有任何 WSGI 网络服务器允许将它们动态绑定到一个空闲端口,然后让选择的端口号可供程序使用?或者我可以自己创建一个监听套接字,然后交给一个WSGI服务器使用吗?

使用wsgiref.simple_server

import wsgiref.simple_server
your_app = wsgiref.simple_server.demo_app
server = wsgiref.simple_server.make_server('127.0.0.1', 0, your_app)
_, port = server.server_address
# start the browser, perhaps on a separate thread after a delay
server.serve_forever()

使用Cheroot:可能有更简单的方法,但这种方法有效:

import threading, time, cheroot.wsgi
server = cheroot.wsgi.Server(('127.0.0.1', 0), your_app)
def get_port():
    while not server.ready:
        time.sleep(0.1)
    _, port = server.bind_addr
    # start the browser
threading.Thread(target=get_port).start()
server.start()