在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