Python Celery线程,工作者和vCPus

时间:2014-02-02 21:22:02

标签: python django multithreading rabbitmq celery

我们已经编写了一个应用程序,通过电子邮件向我们客户的200,000多名客户发送账单信息。目前我们正在使用批量处理程序,需要2天以上的时间才能按顺序发送所有电子邮件。

我们已将整个计划转移到Celery,我们已经看到一些正常的2工人负荷有了显着改善。

有没有人对Celery进行过基准测试?文档说,工作人员的数量必须等于性能的CPU数量。假设我们虚拟化服务器并在物理8核服务器上设置32个vCPU,我们可以在并发的32个线程上运行它。

邮件通过不同的邮件服务器发送,服务器只运行Rabbit MQ,Celery和应用程序。请告知正确数量的工作人员和线程以及vcpus,以避免不必要的排队和延迟。

1 个答案:

答案 0 :(得分:1)

简短的回答:您需要了解自己在做什么,并且可能需要自己测量

长:

主要问题是您的任务是CPU绑定还是I / O(网络/磁盘)绑定。如果您的任务受CPU限制(可能是生成模板,图像之类的东西),那么添加工作人员将无法获得任何改进。但是,大多数机会是你在I / O绑定(网络)任务,如果你正在等待网络确认,并且邮件服务器没有瓶颈等,你可能会通过使用更多的工作人员获得更高的结果。

为了更好地理解这一点,我强烈建议您慢慢走过David Beazley的眼睛开场演示:An Introduction to Python Concurrency。这不包括Celery和Tornado,但是对基础技术和问题给出了很好的概述,并列出了解决方案(以及示例)。