Python RQ的工作推送性能不理想



尝试使用python-rq来支持我们的Web应用程序的后端,但是推送新作业需要很长时间-高达12秒。

当执行enqueue_call函数调用时,性能会受到影响,特别是当连接到系统的工作进程数量增加(超过200个)时。

系统工作方式如下:

  1. 前端向任务队列服务器推送作业。它使用enqueue_call函数向作业传递参数(如timeout和ttl),以及要执行的函数的实际参数。
  2. 多个进程(分布在几台机器上)正在运行工作进程,每个进程在UNIX screen下运行。worker遵循文档中提供的模式,执行Worker.work()无限循环函数来监听队列。
  3. 在处理过程中,一些任务产生新的任务,通常在它们运行的同一队列上。

关于基建:

  • 运行此任务队列的Redis服务器专用于此任务队列。此外,持久性也被禁用。它运行在一个4gb的Rackspace服务器上。
  • 当在服务器上运行redis-benchmark和任务队列时,我们得到的结果在大多数基准测试中平均超过20000 r/s。

在这种情况下,我们如何提高新工作的推送性能?我们应该使用更好的模式吗?

12秒?这太疯狂了。

你考虑过用芹菜吗?
从未使用过redis-rq,但从我看到的文档来看,它对大量工人来说不是很好
Redis队列通常基于BLPOP命令,它可以与多个客户端一起工作,但谁知道它真正可以处理多少一个键。

所以我建议你切换到芹菜或者为python-rq编写自己的任务分发器,这不会比切换

更容易。

最新更新