【问题标题】:Are uWSGI workers non-blocking?uWSGI 工作人员是非阻塞的吗?
【发布时间】:2013-02-24 08:59:07
【问题描述】:

我开始使用 uWSGI,我想知道它的工作人员是否是非阻塞/基于事件的(就像 nginx 一样)。

假设我已经像这样启动了 uWSGI:

uwsgi --http :8000 --wsgi-file test.py

如果 worker 内部的进程正在等待 IO,它是否会暂停以支持另一个应用程序请求?还是会阻止其他请求?

如果它确实被此设置阻塞,是否可以通过某种方式更改行为以实现更高的并发级别?

【问题讨论】:

    标签: uwsgi


    【解决方案1】:

    这取决于您如何配置它,以及您的应用如何运行。

    您可能对该页面感兴趣,因为它阐明了近期的许多不良行为(例如由应用程序独立应用单个事件模型):

    https://github.com/unbit/uwsgi-docs/blob/master/Async.rst

    【讨论】:

    • 谢谢,我正在浏览该文档。我已将我的问题编辑得更具体。
    • 不清楚你是否已经阅读了我发布的链接,但你的问题应该仍然得到相同的答案:如果 test.py 可以重写为非阻塞(通过特定的 api,monkeypatching或任何你想要的)你可以配置 uWSGI 以使用该技术,否则只需使用多进程或多线程。
    • 好的,现在我想了解为什么 uwsgi 不能像 nginx 一样默认“非阻塞”..
    • 因为它托管您的应用程序可能会阻止(我很确定您的应用程序会在您要求时阻止;)
    • 所以如果我可以直接从 nginx 启动我的应用程序(也许通过使用 mod_wsgi),nginx 会阻塞吗?这意味着 nginx 仅针对它自己所做的事情(如获取文件)是非阻塞的?如果我在它的事件循环中添加一些阻塞进程,它的性能就会消失吗?
    【解决方案2】:

    您可以在 python 中使用 Gevent 并在 uwsgi.ini 中配置 gevent 选项。

    http://uwsgi-docs.readthedocs.io/en/latest/Gevent.html

    记住不要在 gevent (thread=0) 中使用线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多