首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uWSGI,cherrypy和threading

uWSGI,cherrypy和threading
EN

Stack Overflow用户
提问于 2012-12-08 19:42:52
回答 2查看 3.6K关注 0票数 0

前言:我想把这些问题分成更小的问题,但显然,我错过了一些拼图,在我看来是不可能的。

我使用cherrypy构建在WSGI服务器中的cherrypy应用程序开发了cherrypy应用程序。我天真地认为,当时机成熟时,我将能够使用创建的WSGI应用程序类,并使用任何符合WSGI的服务器部署它。

我使用这篇博客文章创建了自己的cherrypy插件和工具,用于在http请求期间使用SQLAlchemy连接数据库。

我希望任何服务器都能像cherrypy内置的服务器那样工作:

  1. 主进程将生成X线程以满足X并发请求
  2. 我的引擎插件将使用连接池=X创建SQLalchemy引擎(因此任何请求都有其连接)
  3. 在请求到达时,我的工具将从池中提供sql炼金术连接。

此流与uWSGI不匹配(只要我理解它)。

我在application.py配置中分配我的uWSGI。该文件如下所示:

代码语言:javascript
复制
cherrypy.tools.db = DbConnectorTool()
cherrypy.engine.dbengine = DbEnginePlugin(cherrypy.engine, settings.database)
cherrypy.config.update({
    'engine.dbengine.on': True
})

from myapp.application import Application
root = Application(settings)
application = cherrypy.Application(root, script_name='', config=settings)

在开发和测试应用程序时,我使用这个application.py将我的应用程序安装到cherrypy的内置服务器中。

问题是uWSGI本身没有创建任何线程,我的SQLAlchemy插件也没有使用它,因为没有创建cherrypy.engine

uWSGI是否支持线程处理,即使用线程来服务多个并发请求?我可以在我的application.py中启动这些线程吗?uWSGI会理解它并将这些线程用于并发请求吗?如何才能做到这一点?我觉得樱桃可以用,还是不可以?那么我的SQLAlchemy插件呢,当我只使用WSGI cherrypy.Application时,如何启动cherrypy.engine呢?

任何能帮助我的帮助或信息都将不胜感激。

编辑:

我的uWSGI配置:

代码语言:javascript
复制
<uwsgi>
    <socket>127.0.0.1:9001</socket>
    <master/>
    <daemonize>/var/log/uwsgi/app.log</daemonize>
    <logdate/>
    <threads/>
    <pidfile>/home/web/uwsgi.pid</pidfile>
    <uid>uwsgi</uid>
    <gid>uwsgi</gid>
    <workers>2</workers>
    <harakiri>90</harakiri>
    <harakiri-verbose/>
    <home>/home/web/</home>
    <pythonpath>/home/web/instance</pythonpath>
    <module>core.application</module>
    <no-orphans/>
    <touch-reload>/home/web/uwsgi-reload-web</touch-reload>
</uwsgi>
EN

回答 2

Stack Overflow用户

发布于 2012-12-18 21:36:21

uWSGI使用的是工作进程,而不是线程。值得注意的是,这意味着不再在所有请求之间共享全局。您可以将SharedArea用于全局数据。默认情况下,进程是分叉的,所以请确保您对此没有问题,或者调整设置(请参阅要知道的事)。

使用cherrypy.tree.mount(root, config=settings)调用获取Cherrypy的WSGI应用程序。

如果您的DB插件没有线程/共享数据问题,它很可能会工作。正如您所说的,您可能需要cherrypy.engine.start(),但绝对不需要cherrypy.engine.block(),因为您的主线程现在是uWSGI工作线程。

票数 6
EN

Stack Overflow用户

发布于 2012-12-09 07:15:12

您应该发布您的uWSGI配置,否则将很难理解发生了什么。

顺便说一句,要生成额外的线程(每个工作人员),您只需添加-线程N。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13781185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档