Python Celery 线程、工作线程和 vCPU

标签 python django multithreading rabbitmq celery

我们编写了一个应用程序,通过电子邮件向我们客户的 200,000 多个客户发送账单信息。

目前,我们使用的是批处理程序,需要 2 天多的时间才能按顺序发送所有电子邮件。

我们已将整个程序转移到 Celery,并且我们已经在常规 2 个工作负载上看到了一些显着的改进。

有人对 Celery 进行过基准测试吗?

文档指出,为了提高性能,worker 的数量必须等于 CPU 的数量。假设我们虚拟化服务器并在物理 8 核服务器上设置 32 个 vCPU,我们可以以 32 线程并发运行它吗?

邮件通过不同的邮件服务器发送,服务器仅运行 Rabbit MQ、Celery 和应用程序。

请告知正确的工作线程、线程和 vcpu 数量,以避免不必要的排队和延迟。

谢谢!

最佳答案

简短回答:您需要了解自己在做什么,并可能自己进行衡量

更长:

主要问题是您的任务是否受 CPU 限制或 I/O(网络/磁盘)限制。如果您的任务受 CPU 限制(可能是生成模板、图像等任务),则通过添加工作线程不会获得任何改进。然而,大多数情况下,您正在执行 I/O 绑定(bind)(网络)任务,并且如果您正在等待网络确认,并且邮件服务器等不存在瓶颈,那么您可能能够通过使用更多工作线程来获得更高的结果。

为了更好地理解这一点,我强烈建议您慢慢浏览 David Beazley 令人大开眼界的演示:An Introduction to Python Concurrency 。这不包括 Celery 和 Tornado,但很好地概述了底层技术和问题,并列出了解决方案(带有示例)。

关于Python Celery 线程、工作线程和 vCPU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21516404/

相关文章:

Python:Pandas 绘制具有居中 x 值的直方图

python - 设置 Cx_Oracle

python - 社交网站授权

python - 我的代码会增加线程吗?

python - 更改 Altair 折线图和面积图中的步长宽度

python - 为什么 pandas 在日期索引表中查找日期时会生成 KeyError?

python - Mongoengine - 嵌入式文档过滤

html - django 将 html href 和 src 替换为 {% static %} 标签

python - 为什么Python的threading.Condition默认使用RLock?

c - Linux C 中的 Pthread_join 功能