1

我正在使用 Python 3.5、 uWSGI 2.0.11和 SQLAlchemy 1.0.9开发 Pyramid 1.7 Web 应用程序。似乎在将 uWSGI 与多个 worker 一起使用时,我们应该使用 uWSGI postfork 函数来连接到 Cassandra 集群,以确保每个 fork 将使用与池的独立连接。我尝试了以下 Pyramid 实现(文件:my_app/__init__.py

#my_app/__init__.py
def main(global_config, **settings):

    try:
        from uwsgidecorators import postfork
    except ImportError:
        # We're not in a uWSGI context, no need to hook dbs connection
        # to the postfork event.
        connection.setup(
                     [settings['cassandra.host']],
                     settings['cassandra.keyspace'],
                     port=int(settings['cassandra.port'])
        )

    else:
        @postfork
        def init():
            """ Initialize dbs connexions in the context.
                Ensures that a new connexion is returned for every new request.
            """
            if cql_cluster is not None:
                cql_cluster.shutdown()
            if cql_session is not None:
                cql_session.shutdown()

            connection.setup(
                     [settings['cassandra.host']],
                     settings['cassandra.keyspace'],
                     port=int(settings['cassandra.port'])
            )


    config = Configurator(settings=settings, root_factory=my_factory)
    config.scan()
    return config.make_wsgi_app() 

但是在使用 uWSGI 在生产中运行应用程序时,我遇到了连接超时。如果您安装libev库,Cassandra 将默认检测该库并使用它。但我不知道是否需要在 uWSGI 中进行一些更改才能兼容(一定要禁用 Monkeypatching)。

这是使用uWSGI 分叉模式配置 Pyramid + Cassandra + uWSGI 的正确方法吗?还是我错过了什么?

4

0 回答 0