gunicorn 不能与一个以上的工人一起运行

Posted

技术标签:

【中文标题】gunicorn 不能与一个以上的工人一起运行【英文标题】:gunicorn can't run with more than one worker 【发布时间】:2017-01-17 07:22:42 【问题描述】:

我有一个简单的 websocket 应用程序,例如 main.py

当我尝试使用一名工作人员启动它时,

gunicorn -w 1 -k "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" main:EchoApplication

没有问题。

如果我将w参数增加到大于1,例如-w 20,childs开始崩溃,

error: [Errno 48] Address already in use: ('127.0.0.1', 8100)

有什么想法吗?附上源码

from geventwebsocket import WebSocketServer, WebSocketApplication, Resource
import time

class EchoApplication(WebSocketApplication):
    def on_open(self):
        print "Connection opened"

    def on_message(self, message):
        self.ws.send('Let me take a sleep')
        time.sleep(10)
        self.ws.send(message)

    def on_close(self, reason):
        print reason

WebSocketServer(
    ('127.0.0.1', 8100),
    Resource('/': EchoApplication)
).serve_forever()

【问题讨论】:

你不能在同一个端口上运行 20 个应用程序,每个应用程序都需要一个唯一的端口 @iScrE4m 该死!我认为它与 apache 的 pre fork 模型具有相同的行为。 【参考方案1】:

您不能使用相同的端口。我们遇到了这个问题并花了一些时间来解决。

WebSocket 绑定到一个端口,每个 gunicorn 都会尝试在同一个端口中创建 WS。

【讨论】:

以上是关于gunicorn 不能与一个以上的工人一起运行的主要内容,如果未能解决你的问题,请参考以下文章

直接将 AWS ELB 与 Gunicorn 一起使用(没有 nginx)有啥缺点?

为在Gunicorn上运行的Flask-SQLAlchemy应用选择数据库pool_size

Gunicorn - 如果客户端关闭他们的连接,如何杀死工人?

Gunicorn 与多个工人:有没有一种简单的方法可以只执行一次某些代码?

对Gunicorn的架构进行简要描述

Gunicorn 多个烧瓶工人和绑定任务 celery