任务队列:每个用户一次只允许一个任务

时间:2015-03-04 07:27:00

标签: python google-app-engine task-queue

在我的应用程序中,我需要每个用户一次只允许一个任务。我看到我们可以在max_concurrent_requests: 1中设置queue.yaml。但是这将允许队列中一次只有一个任务。

当用户单击按钮时,将启动任务,并将向队列添加50个任务。如果2个用户在几乎相同的时间内单击该按钮,则总任务计数将为100.如果我给max_concurrent_requests: 1,则它将仅运行来自这些用户中的任何一个任务。

我如何处理这种情况?

1 个答案:

答案 0 :(得分:1)

您可以在queue.yaml中指定任意数量的队列,而不是仅使用默认推送队列。如果您认为只有五个用户可能同时竞争同时使用它们,那么只需定义五个队列即可。有一个全局计数器增加1,当它超过5时回到1。使用它来指定给定用户在请求时将其任务推送到哪个队列。使用这种方法,当你有六个或更多用户同时添加任务时,你并没有比现在更糟糕(事实上,可能会好得多)。

如果您发现服务器超载,请调低默认值" rate:5 / s"如果必须,可以降低部分或全部队列的值,但首先尝试降低桶大小,因为当没有多个用户时,降低速率会降低速度。就个人而言,我首先尝试只关闭四个添加的队列并快速离开第一个队列以解决此问题,如果您遇到无法通过调整存储桶大小解决的性能问题。