Python 芹菜排满时,Django会阻止吗?

Python 芹菜排满时,Django会阻止吗?,python,django,multithreading,rabbitmq,celery,Python,Django,Multithreading,Rabbitmq,Celery,我正在我的web应用程序上做一些度量分析,它大量使用芹菜。我有一个度量标准,它测量从post_保存信号到芹菜任务(它本身称为许多不同的芹菜任务)到该任务结束的整个行程。我已经在5秒内用多达100个请求访问了服务器 我发现有趣的是,当我用数百个请求(这需要数千个芹菜工作进程排队)访问服务器时,从post save到主芹菜任务结束所需的时间显著增加,即使我从未进行任何额外的数据库调用,芹菜任务不应该阻碍主要任务 当我发出一堆请求时,队列中有这么多芹菜任务,这真的会减慢我的post_save函数和主芹

我正在我的web应用程序上做一些度量分析,它大量使用芹菜。我有一个度量标准,它测量从post_保存信号到芹菜任务(它本身称为许多不同的芹菜任务)到该任务结束的整个行程。我已经在5秒内用多达100个请求访问了服务器

我发现有趣的是,当我用数百个请求(这需要数千个芹菜工作进程排队)访问服务器时,从post save到主芹菜任务结束所需的时间显著增加,即使我从未进行任何额外的数据库调用,芹菜任务不应该阻碍主要任务


当我发出一堆请求时,队列中有这么多芹菜任务,这真的会减慢我的post_save函数和主芹菜任务的逻辑吗?也就是说,将主芹菜任务创建的子任务放到拥挤队列中的相关处理是否会对到达主芹菜任务末尾所需的时间产生重大影响

如果不深入分析您的实际代码和基准测试协议,就不可能真正回答您的问题,虽然我有一些Python、Django和芹菜的工作经验,但我无法进行如此深入的分析。现在有几点非常明显:

  • 如果您的工人与Django实例在同一台计算机上运行,他们将与Django进程争夺CPU、RAM和IO

  • 如果基准测试“客户机”也在同一台计算机上运行,那么您就有一个“heisenbench”案例——以每秒100秒的HTTP请求轰炸服务器也会占用大量资源


  • 长话短说:并发/并行编程不会给您更多的处理能力,它只允许您(或多或少)轻松地水平扩展

    我不确定速度是否会减慢,但这可能会导致应用程序挂起。我遇到过这样的问题:一个应用程序将备份几个其他队列,而没有工作人员。然后,我的应用程序无法再对消息排队


    如果打开django shell并尝试对任务排队。然后按ctrl+c。我不太记得堆栈跟踪应该是什么,但是如果你把它贴在这里,我可以确认一下。

    作为一个有趣的问题,你用什么经纪人来做芹菜?