哪个worker_concurrency我应该有io绑定的任务在芹菜?



我有几个处理API请求的任务。API实际上可能需要相当长的时间来响应。5 -10秒并不罕见。

我如何决定哪个值是合理的worker_concurrency为io绑定任务?

文档只是声明:

同时执行任务的工作进程/线程数/绿线程数。

如果你做的主要是I/O,你可以有更多的进程,但如果主要是cpu限制,尽量保持它接近你的机器上的cpu数量。如果不设置,则使用主机的cpu/核数。

如果我选择的数字太高会发生什么?从概念上讲,我预计操作系统将在线程之间频繁切换,以至于(在某些时候)线程切换本身成为一个高CPU负载。或者还有更多的原因?

读到这里,我认为我应该使用eventlet来完成io绑定任务:

celery -A proj worker -P eventlet - concurrent =500

worker_concurrency--concurrency是否相同?

我偶然发现了同样的问题。因此,正如您在这篇博文中所读到的,这种情况下的并发性意味着Greenletsgreen threads的数量。所以它们之间的切换和threads之间的切换是不一样的,因为每个green threads

"自愿或明确地在代码的指定点放弃对彼此的控制">

" greenlet在应用程序空间管理,而不是在内核空间管理。">

如你所读的博文所述。

另一方面,线程之间的切换是由底层操作系统的task scheduler完成的。因此,记住这一点,这不是一个可以通过给你一个数字来回答的问题。

在我看来,您使用的green threads的数量应该针对您的场景和执行您的芹菜任务的机器进行测试,以便获得最佳性能。可以从25开始,然后是100、500、1000等等,以大致了解程序完全执行所需的不同时间。

此外,您不仅可以使用eventlet池测试程序的性能,还可以使用非常相似但不相同的gevent池测试程序的性能。

最新更新