【问题标题】:How does the uwsgi spooler work?uwsgi 假脱机程序是如何工作的?
【发布时间】:2020-05-06 18:47:31
【问题描述】:

我需要一个任务队列,以便可以将一些繁重的操作移出 uwsgi 上下文而不影响用户。由于目前正在使用 uwsgi,我认为可以使用 uwsgi spooler。我想知道它到底是如何工作的?假脱机任务是否仍在其他一些 uwsgi 工作人员中执行?如果是,那么服务器仍然会过载,因为其他工作人员将忙于为假脱机任务提供服务。有更好的选择吗?我正在使用python

【问题讨论】:

    标签: python message-queue uwsgi task-queue


    【解决方案1】:

    参考:http://uwsgi-docs.readthedocs.org/en/latest/Spooler.html

    每个假脱机程序都是一个不同的进程,旨在运行以文件形式在目录(假脱机目录)中排队的任务。多个 spooler 进程(每个 uWSGI 实例)可以位于同一个 spool dir 以并行化任务组,并且可以配置多个 spooldir(以具有不同的任务组)

    假脱机方法是非常低级的,但需要零维护(最终删除任务只是 rm'ing 文件的问题)并且非常可靠。

    据我所知,python 世界中唯一的替代品(而且很可能是最常用的)是芹菜

    http://www.celeryproject.org/

    否则,您可以依赖古老的 redis + 守护线程方法,其中 python 线程消耗在 redis 中排队的任务。最终你可以使用 uWSGI mule(它就像一个工人,但没有外部访问)而不是线程来消费任务。

    【讨论】:

      【解决方案2】:

      uWSGI Spooler 是一个内置于 uWSGI 中的队列管理器,其工作方式类似于打印/邮件系统。这种方法非常底层,但确实很可靠。

      最流行的 Python 队列是 Celery,它提供了广泛的任务管理选项和功能。不幸的是,基于 Celery 的系统并不是最容易保持和运行的,当某些事情进展不顺利时,问题通常不会那么容易找到。您可以向任何 DevOps 工程师询问他们使用 Celery 的经验,但要准备好接受一些苛刻的话。

      幸运的是,还有一个替代方案:uWSGI Spooler,这就是我们将在今天的文章中讨论的内容。

      uWSGI Spooler 和 Celery 的主要区别在于前者不需要任何额外的组件(例如 Celery 可能需要像 Redis 这样的存储系统),从而减少了失败一半。任务可以存储在目录、外部目录或网络池中。

      所以,有一个“必读”参考列表:

      【讨论】:

        猜你喜欢
        • 2013-03-11
        • 2013-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-19
        • 1970-01-01
        • 2020-05-12
        相关资源
        最近更新 更多