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

Python 任务队列:每个用户一次只允许一个任务,python,google-app-engine,task-queue,Python,Google App Engine,Task Queue,在我的应用程序中,每个用户一次只允许执行一个任务。我已经看到,我们可以在queue.yaml中设置max\u并发请求:1。但这将在队列中一次只允许一个任务 当用户单击按钮时,将启动一个任务,并将向队列中添加50个任务。如果两个用户几乎同时单击该按钮,则总任务数将为100。如果我给出max\u concurrent\u requests:1它将只运行来自这些用户中任何一个的一个任务 如何处理这种情况?您可以在queue.yaml中指定任意数量的队列,而不仅仅是使用默认的推送队列。如果您觉得,一次最

在我的应用程序中,每个用户一次只允许执行一个任务。我已经看到,我们可以在
queue.yaml
中设置
max\u并发请求:1
。但这将在队列中一次只允许一个任务

当用户单击按钮时,将启动一个任务,并将向队列中添加50个任务。如果两个用户几乎同时单击该按钮,则总任务数将为100。如果我给出
max\u concurrent\u requests:1
它将只运行来自这些用户中任何一个的一个任务


如何处理这种情况?

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


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

不清楚您在这里试图实现什么。如果设置“最大并发请求数:1”并添加两批50个任务,则将按照队列定义中指定的速率和它们排队的顺序一次执行一个任务。任务队列没有用户的概念。如果您想知道队列中有多少任务,请尝试
queue.fetch_statistics()
@tx802是的,您的评论让我意识到,简单地循环队列有点愚蠢。我会依次获取每个队列的统计信息,直到找到一个空队列。如果没有一个是空的,我将使用加载最少的一个。