当芹菜队列填满时,Django会阻塞吗?

时间:2014-02-13 20:54:10

标签: python django multithreading rabbitmq celery

我正在我的网络应用程序上进行一些度量分析,这大量使用了芹菜。我有一个度量标准,它测量从post_save信号到celery任务(它本身称为许多不同的芹菜任务)到该任务结束的完整行程。我在5秒钟内一直在向服务器发出最多100个请求。

我感到有趣的是,当我点击服务器时有数百个请求(需要排队数千个芹菜工作进程),从post保存到主芹菜任务结束所需的时间显着增加即使我从不做任何额外的数据库调用,也没有芹菜任务应该阻止主要任务。

当我发出大量请求时队列中有如此多的芹菜任务真的很快就会减慢我的post_save函数和主芹菜任务中的逻辑吗?也就是说,将主要芹菜任务创建的子任务与拥挤的队列相关联的处理能否对到达主要芹菜任务结束所需的时间产生重大影响?

2 个答案:

答案 0 :(得分:1)

如果不对您的实际代码和基准协议进行深入分析,并且在拥有Python,Django和Celery的一些工作经验时,我无法真正回答您的问题,我将无法进行这样深入的分析。现在有几个非常明显的要点:

  1. 如果您的工作人员与Django实例在同一台计算机上运行,​​他们将与Django进程竞争CPU,RAM和IO。

  2. 如果基准“客户端”也在同一台计算机上运行,​​那么你有一个“heisenbench”案例 - 用每秒100次HTTP请求轰炸服务器也会占用大量资源......

  3. 总而言之:并发/并行编程不会给你更多的处理能力,它只会让你(或多或少)轻易地水平扩展。

答案 1 :(得分:0)

我不确定放慢速度,但它可能导致应用程序挂起。我有这个问题,一个应用程序将备份其他几个没有工作人员的队列。然后,我的应用程序可能不再对消息进行排队。

如果打开django shell并尝试排队任务。然后点击ctrl + c。我不太清楚堆栈跟踪应该是什么,但如果你在这里发布我可以确认它。