Celery
官方在很久以前就放弃了对windows
的支持,大约在4.0版本左右。Celery 3是支持windows
的最后一个版本,而现在Celery
最新版本已经到了5.4
。
主要原因是因为perfork pool
是Celery
的默认pool
,prefork pool
类似于Python
的multiprocessing 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
线程池类型中的线程由操作系统内核直接管理,只要Python
的ThreadPoolExector
支持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
原文链接:https://beltxman.com/4176.html,若无特殊说明本站内容为 行星带 原创,未经同意禁止转载。