有没有一种方法可以使用伪随机序列或哈希函数模拟队列的python random.shuffle?

Abe*_*Abe 5 python random algorithm hash mongodb

我正在基于任务队列构建应用程序:它为多个异步连接的客户端提供一系列任务。不同之处在于,必须按随机顺序执行任务

我的问题是,我现在使用的算法在计算上非常昂贵,因为它依赖于许多大型查询和来自数据库的传输。我很想知道有一种便宜的方法可以达到相同的结果,但是我看不出解决方案。您能想到针对此问题的巧妙解决方案吗?

这是我现在正在使用的(计算上昂贵的)算法:

当客户查询新任务时...

  1. 查询数据库中的“未完成”任务
  2. 将所有任务放在列表中
  3. 随机播放列表(使用random.shuffle)
  4. 将第一个任务标记为“进行中”
  5. 将任务参数发送给客户端以完成操作

客户完成任务后...

6a。记录结果并将任务标记为“完成”。

如果客户未能在一定期限内完成任务...

6b。将任务重新标记为“未完成”。

似乎我们可以通过用伪随机序列或哈希函数替换步骤1、2和3来做得更好。但是我不太清楚整个解决方案。有想法吗?

其他注意事项:

  • 万一重要,我将使用python和mongodb进行所有这些操作。(Mongodb没有巧妙的“使用find_one有效地返回随机匹配条目”的用法,对吗?)
  • 术语“队列”有点误导。所有任务都存储在mongodb中单个集合的子字段中。集合中的长度(任务总数)是已知的,并且一开始就固定。
  • 如果有必要,可以多次分配相同的任务,只要这种情况很少发生即可。但是这种情况的实例将非常罕见,因为完成每个任务的成本很高。
  • 我在每个客户端上都有识别信息,因此我们确切地知道谁发起了每个任务请求。

ibl*_*lue 1

一种简单的方法可以从 MongoDB 获取随机文档!

请参阅MongoDB 中的随机记录

如果您不希望某个任务被选择两次,您可以将该任务标记为活动状态而不选择它。