【问题标题】:CherryPy, SQLAlchemy Core thread safety?CherryPy,SQLAlchemy 核心线程安全?
【发布时间】:2011-12-17 10:39:07
【问题描述】:

在我基于 Web 的应用程序中,我决定使用 Cherrypy 3.2 作为 http 框架。

我正在使用cherrypy.Application 类创建与 WSGI 兼容的应用程序对象,该对象通过 Apache2 和 mod_wsgi 提供服务。

另外,我只使用 SQLalchemy 0.7.3 的核心组件(不是 ORM)。有一些用于cherrypy 的工具可用于每个请求的正确会话绑定(如SATools)。但是 SQLalchemy 的 Session 对象是 ORM 的一部分,而不是核心。

所以我开始考虑如何制作类似的工具但没有会话。

SQLalchemy 的文档说:

对于使用 os.fork 系统调用的多进程应用程序, 或者例如 Python 多处理模块,它通常是 要求为每个子进程使用单独的引擎。

那么如何正确地为每个cherrypy 线程创建一个引擎呢?注意线程是由 apache2 创建的(可能)。

谢谢!!

编辑:这可能很重要,wsgi 应用程序由 apache2 以守护程序模式运行

【问题讨论】:

    标签: thread-safety python-3.x sqlalchemy cherrypy


    【解决方案1】:

    在 mod_wsgi 下,如果我理解这个问题,我认为这不是问题,因为在 mod_wsgi 中的 fork 之前应用程序没有预加载到内存中。相反,应用程序被单独加载到每个不同的进程中,因此不会因跨叉继承而导致共享内容的问题。

    【讨论】:

    • 你确定吗?我正在测试它,我认为应用程序对象实际上是跨线程共享的。
    • 我已经编辑了问题,添加了 wsgi app 在守护模式下使用的信息(在这种情况下可能很重要)
    • 进程与线程不同。我专注于引用的文本,其中谈到了 os.fork。这意味着它正在谈论进程而不是线程。因此,我认为您对每个线程都需要一个感到困惑,根据引用的部分,我看不出您需要。
    • 抱歉迟到了。我现在想通了。我将线程和进程混合在一起。
    猜你喜欢
    • 1970-01-01
    • 2017-12-23
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多