【发布时间】:2021-04-29 05:38:25
【问题描述】:
这是一个关于如何设计解决方案的更普遍的问题。
我们的目标是拥有一个 API,它可以获取一些文本或文本列表,对其进行处理并返回转换后的文本。我应该如何处理它,以便每当请求文本时,包含文本列表的所有请求都会等待并且首先处理一个文本?
【问题讨论】:
标签: python nginx flask celery scheduled-tasks
这是一个关于如何设计解决方案的更普遍的问题。
我们的目标是拥有一个 API,它可以获取一些文本或文本列表,对其进行处理并返回转换后的文本。我应该如何处理它,以便每当请求文本时,包含文本列表的所有请求都会等待并且首先处理一个文本?
【问题讨论】:
标签: python nginx flask celery scheduled-tasks
这个问题有点笼统,因此我将用我在过去项目中开发的堆栈来回答。我会使用流式传输(https://redis.io/topics/streams-intro)的 redis-server 功能。你可以有一个文本列表的流和一个文本流,当你的算法搜索新任务时,他首先检查文本列表的流是否有任何待处理的包。我推荐使用 redis-server,因为它是一个强大的解决方案,可以访问专用于此服务的服务器,而不是使用 celery。但我从来没有为此目的使用过 celery,也不能在这个话题上为他代言。
【讨论】:
一般来说,您将有一个排队的请求堆(优先队列)。您的 API 可以从此堆中获取最高优先级的请求。
在这种特殊情况下,如果您只需要先strs 和第二个lists,请定义您的优先级函数,如lambda x: 2 if isinstance(x, str) else 1。
请注意,这并没有考虑到潜在的超时。如果您有很多 str 请求,list 可能需要等待一段时间。
【讨论】: