我们编写了一个应用程序,它通过电子邮件向我们客户的20多万客户发送帐单信息。
目前,我们正在使用一个批处理程序,需要超过2天的时间来发送所有的电子邮件在一个连续的方式。
我们已经将整个计划转移到celery ,我们已经看到了一些显着的改善,定期2工人负荷。
有人给Celery做过基准测试吗?
文档中指出,工作线程的数量必须等于CPU的数量,以保证性能。假设我们虚拟化服务器,并在物理8核服务器上设置32个vCPU,我们能否以32个线程并发运行它?
邮件通过不同的邮件服务器发送,服务器只运行Rabbit MQ、Celery和应用程序。
请建议工作线程和vcpu的正确数量,以避免不必要的排队和延迟。
谢谢大家!
1条答案
按热度按时间gdrx4gfi1#
简短回答:您需要了解自己在做什么,并且可能需要自己进行衡量
更长:
主要问题是您的任务是受CPU限制还是I/O限制(网络/磁盘)绑定。如果任务是CPU绑定的(可能是生成模板、图片之类的东西),你不会通过添加工作线程得到任何改进。(网络)任务,并且如果您正在等待网络确认,并且在邮件服务器等中没有瓶颈,使用更多的工作人员可能会获得更高的结果。
为了更好地理解这一点,我强烈建议你慢慢地阅读大卫·比兹利的演讲:An Introduction to Python Concurrency.这并没有涵盖Celery和Tornado,但对底层技术和问题进行了极好的概述,并列出了解决方案(并提供了示例)。