我有3个远程工作者,每个人都使用默认池(prefork)和单个任务运行.
单个任务需要2到5分钟才能完成,因为它在许多不同的工具上运行并在ELK中插入数据库.
worker命令: celery -A project worker -l info
我应该使用哪个池类来加快处理速度?
有没有其他方法来提高性能?
有趣的是这个问题滚动了.
我们刚刚从eventlet切换到gevent.Eventlet导致悬挂经纪人关系,最终导致工人陷入困境.
一般提示:
如果你受I/O限制,请使用更高的concurreny,我将从25开始,检查cpu负载并从那里进行调整,目标是为进程提供99.9%的cpu使用率.
如果你的员工队伍增长,你可能想要使用--without-gossip和--without-mingle.
不要使用RabbitMQ作为你的结果后端(redis ftw!),但RabbitMQ是我们的首选经纪人(redis上的amqp仿真和芹菜的hacky async-redis解决方案很臭,引起很多悲痛在我们过去).
调整芹菜工人的更高级选项:
将每个工作进程固定到一个核心,以避免移动进程的开销(taskset是你的朋友)
如果一个工作人员并不总是工作,考虑与一个或两个其他进程共享核心,如果一个进程具有优先级,则使用nice