【问题标题】:Queuing tasks with prioritization rules使用优先级规则排队任务
【发布时间】:2021-04-29 05:38:25
【问题描述】:

这是一个关于如何设计解决方案的更普遍的问题。

我们的目标是拥有一个 API,它可以获取一些文本或文本列表,对其进行处理并返回转换后的文本。我应该如何处理它,以便每当请求文本时,包含文本列表的所有请求都会等待并且首先处理一个文本?

【问题讨论】:

    标签: python nginx flask celery scheduled-tasks


    【解决方案1】:

    这个问题有点笼统,因此我将用我在过去项目中开发的堆栈来回答。我会使用流式传输(https://redis.io/topics/streams-intro)的 redis-server 功能。你可以有一个文本列表的流和一个文本流,当你的算法搜索新任务时,他首先检查文本列表的流是否有任何待处理的包。我推荐使用 redis-server,因为它是一个强大的解决方案,可以访问专用于此服务的服务器,而不是使用 celery。但我从来没有为此目的使用过 celery,也不能在这个话题上为他代言。

    【讨论】:

    • 似乎是一个可行的解决方案。它处理算法中消耗输入的部分。至于返回结果,是否引入了负责结果的额外队列?
    • 一个负责结果的队列?什么意思?
    • 例如有一个烧瓶应用程序,用户提交一些数据。数据通过队列处理,然后需要返回给用户。
    【解决方案2】:

    一般来说,您将有一个排队的请求堆(优先队列)。您的 API 可以从此堆中获取最高优先级的请求。

    在这种特殊情况下,如果您只需要先strs 和第二个lists,请定义您的优先级函数,如lambda x: 2 if isinstance(x, str) else 1

    请注意,这并没有考虑到潜在的超时。如果您有很多 str 请求,list 可能需要等待一段时间。

    【讨论】:

    • 感谢您的回答。但是在获取请求或像芹菜之类的东西上会更好地使用优先级吗? (我还不熟悉它,所以不确定这是否是一个好的用例)
    • 当然。我过度简化了这一点,并没有考虑生产。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多