使用优先级规则排队任务

Queuing tasks with prioritization rules

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

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

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

在这种特殊情况下,如果您首先需要 strs,然后是 lists,请定义您的优先级函数,例如 lambda x: 2 if isinstance(x, str) else 1.

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

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