我应该在celery中使用哪个池类prefork、eventlet或gevent?

2024-05-17 05:26:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有3个远程工作线程,每一个都使用默认池(prefork)和单个任务运行。在

一个单独的任务需要2到5分钟才能完成,因为它运行在许多不同的工具上,并在ELK中插入数据库。在

辅助命令: 芹菜-项目工作人员-l信息

我应该使用哪个池类来加快处理速度?在

有没有其他方法可以提高绩效?在


Tags: 工具项目方法命令信息数据库elk远程
1条回答
网友
1楼 · 发布于 2024-05-17 05:26:43

有趣的是,这个问题在滚动。在

我们刚从eventlet切换到gevent。Eventlet导致代理连接挂起,最终使工作人员陷入僵局。在

一般提示:

  • 使用更高的并发性如果你是I/O界的,我会从25开始,检查cpu负载并从那里进行调整,目标是进程的cpu使用率达到99.9%。在
  • 如果你的员工数量增加,你可能会想在没有闲言碎语的情况下使用。在
  • 不要使用RabbitMQ作为结果后端(redis ftw!),但RabbitMQ是我们在经纪人方面的首选(redis上的amqp仿真和芹菜的hacky async redis解决方案很难闻,在我们过去引起了很多悲痛)。在

调整芹菜工人的更高级选项:

  • 将每个工作进程固定在一个核心上,以避免移动进程的开销(taskset是您的朋友)
  • 如果一个worker不总是工作,考虑与一个或两个其他进程共享核心,如果一个进程具有优先级,则使用nice

相关问题 更多 >