Python 解决服务器端长轮询的最佳方法

Python 解决服务器端长轮询的最佳方法,python,heroku,flask,worker,python-rq,Python,Heroku,Flask,Worker,Python Rq,我有一个用例,需要每1秒轮询一次API(基本上是无限的while循环)。轮询将由用户通过外部系统动态启动。这意味着可以同时运行多个轮询。当API返回400时,轮询将完成。无论如何,我当前的实现看起来像: Flask应用程序部署在heroku上 Flask应用程序有一个端点,外部系统调用该端点以开始轮询 该flask端点将把消息添加到队列中,一旦worker获得消息,它将开始轮询。我正在使用Heroku Redis去插件。在引擎盖下,它使用python rq和redis 问题是,当某个轮询进程持续

我有一个用例,需要每1秒轮询一次API(基本上是无限的while循环)。轮询将由用户通过外部系统动态启动。这意味着可以同时运行多个轮询。当API返回400时,轮询将完成。无论如何,我当前的实现看起来像:

  • Flask应用程序部署在heroku上
  • Flask应用程序有一个端点,外部系统调用该端点以开始轮询
  • 该flask端点将把消息添加到队列中,一旦worker获得消息,它将开始轮询。我正在使用Heroku Redis去插件。在引擎盖下,它使用python rq和redis 问题是,当某个轮询进程持续很长时间时,另一个进程只是坐在队列上。我希望能够在并发进程中完成所有轮询

    解决这个问题的最佳方法是什么?解雇多个工人

    如果可能有100多个并发进程呢。

    您可以实现一个“加权”//优先级队列。可能有多种实现方法,但我想到的最简单的例子是使用最小或最大堆

    您应该跟踪每个进程的队列中有多少事件,随着一个进程的事件数的增加,新插入事件的权重应该减少。每次处理事件时,您都会开始处理权重最大的事件

    PS更多的工人也将加快工作速度