CherryPy、SQLAlchemy Core 线程安全吗?

发布于 2024-12-12 23:54:27 字数 691 浏览 1 评论 0原文

在我的基于 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以守护进程模式运行

in my web based app, i decided to use Cherrypy 3.2 as http framework.

I am using the cherrypy.Application class to create WSGI compatible appliaction object, which is served via Apache2 with mod_wsgi.

Also, I am using just core components of SQLalchemy 0.7.3 (not ORM). There are available some tools for cherrypy for correct session binding per request (like SATools). But Session object of SQLalchemy is part of the ORM, not the core.

So I have started thinking about how to make similar tool but without session.

The documentation of SQLalchemy says:

For a multiple-process application that uses the os.fork system call,
or for example the Python multiprocessing module, it’s usually
required that a separate Engine be used for each child process.

So how to correctly create one engine per cherrypy thread? Taking note that the threads are created by apache2 (probably).

Thank you!!

edit: it is maybe important, that wsgi application is ran in daemon mode by apache2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

转瞬即逝 2024-12-19 23:54:28

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

Under mod_wsgi I don't think this is an issue if I understand the question because the application isn't preloaded into memory prior to the fork in mod_wsgi. Instead, the application is separately loaded into each distinct process so there are no issues from shared stuff due to inheritance across a fork.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文