1

我在一个与主线程分开的线程中启动了一个简单的 TCP 服务器,监听端口 6677,使用threading.start_new_thread(). 基本上这个服务器所做的就是:

sock = socket(AF_INET, SOCK_STREAM)
sock.bind(('', 6677))
sock.listen(5)
...
print 'Listening...'

while True:
    conn, addr = sock.accept()
    print 'connected!'
    ...

在单独的线程中启动该服务器后,我在主线程中运行了一个简单的 Flask 应用程序:

app.run()

默认使用端口 5000。Flask 应用程序运行良好,但导致 [Errno 98] 地址已在另一个线程的 bind() 调用中使用!这是在从辅助线程打印“Listening ...”之后。这里发生了什么黑魔法?两台服务器不能在同一个地址的不同端口上监听吗?

4

1 回答 1

1

你打电话app.run(debug=True)吗?

如果是这样,Flask 自动重新加载系统将启动你的进程,然后杀死它,然后重新启动它(我相信)。

app.run(debug=True, use_reloader=False)改为这样做。

于 2013-10-09T20:29:00.983 回答