在windows上运行celery worker正确姿势

Celery官方在很久以前就放弃了对windows的支持,大约在4.0版本左右。Celery 3是支持windows的最后一个版本,而现在Celery最新版本已经到了5.4

主要原因是因为perfork poolCelery的默认poolprefork pool类似于Pythonmultiprocessing pool,基于billiard以满足Celery一些特定的需求。

prefork pool基于进程的forking,但windows支持生成进程,而不支持进程forking

那现在使用windows应该如何运行呢?有三个方法:

选择1:solo

solo pool(单进程执行) 即在worker所在的进程和线程上处理任务,严格来说,他不算一个pool

伪代码:

C:\Dev\celery-demo>celery -A app.app worker -l info -P solo

如果需要更多的并发,可以创建多个单进程执行单元。

选择2:Threads

Threads pool 线程池类型中的线程由操作系统内核直接管理,只要PythonThreadPoolExector支持Windows线程,这种池类型就可以在Windows上工作,推荐使用在IO负载的场景。

伪代码:

C:\Dev\celery-demo>celery -A app.app worker -l info -P threads --concurrency=4

选择3:gevent

gevent pool通过Greenlet实现并发。Greenlet类似于asyncio中的协程。当一个任务等待它的结果时,它会让给另一个任务来做它的事情。

因为gevent包支持Windows,只要您了解一些gevent的复杂性,gevent pool仍然是Windows上IO任务处理的合适选项。

伪代码:

C:\Dev\celery-demo>celery -A app.app worker -l info -P gevent --concurrency=4

总结

在本文中,我查看了2024年仍然适用于Windows的三个Celery pool选项:

  • solo
  • threads
  • gevent

请记住,这些都没有得到官方支持,现在可以用不代表将来一直可以使用,所以最好还是使用Linux来运行Celery worker吧。

原文地址:https://celery.school/celery-on-windows

在windows上运行celery worker正确姿势

原文链接:https://beltxman.com/4176.html,若无特殊说明本站内容为 行星带 原创,未经同意禁止转载。

发表评论

您的电子邮箱地址不会被公开。

Scroll to top