gpt4 book ai didi

python - Celery启动命令行中gevent greenlet的适当数量是多少

转载 作者:太空宇宙 更新时间:2023-11-04 05:30:00 26 4
gpt4 key购买 nike

对于 gevent 池,我们可以使用参数 '-c' 来指定 greenlet 编号。如下所示。

celery worker -A celerytasks.celery_worker_init -P gevent -c 1000 --loglevel=info

但它的适当值(value)是多少?

“greenlet number”的真正含义是什么?如果我指定 1000 个 greenlet,如果它们用完了会怎样?

最佳答案

-c 参数是一个 Celery 参数,允许您指定从 worker 中同时执行多少任务,这里是文档的摘录:

The number of worker processes/threads can be changed using the --concurrency argument and defaults to the number of CPUs available on the machine.

当运行 celery 并指示使用 gevent 时,这意味着 celery 将使用绿色线程来处理您的任务,而不是使用 prefork。在这种情况下,您可以引用此页面关于 eventlet on celery docs ,它与 gevent 不同,但适用相同的概念。

这里有一个摘录可以帮助你理解:

The prefork pool can take use of multiple processes, but how many is often limited to a few processes per CPU. With Eventlet you can efficiently spawn hundreds, or thousands of green threads.

但是请注意,gevent 或 eventlet 并不总是比 prefork 好,通常取决于您需要执行哪种类型的任务,如文档的这一部分所述:

Celery supports Eventlet as an alternative execution pool implementation. It is in some cases superior to prefork, but you need to ensure your tasks do not perform blocking calls, as this will halt all other operations in the worker until the blocking call returns.

关于维度很难回答,因为这在很大程度上也取决于您的任务类型和平均负载。根据我个人的经验,一个 celery worker 的成本通常最好不要超过 1000-3000。

最后一点,从 celery 文档看来 gevent 仍在 experimental state 中,您可能想改用 eventlet。

关于python - Celery启动命令行中gevent greenlet的适当数量是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37404941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com