如何在不创建Windows服务的情况下在Windows上运行芹菜工作程序?与$ celery -A your_application worker
有相似之处吗?
Celery 4.0+
尚未正式支持窗口。但出于某些开发/测试目的,它仍然可以在窗口上工作。
使用eventlet
,如下所示:
pip install eventlet
celery -A <module> worker -l info -P eventlet
它适用于window 10
+celery 4.1
+python 3
。
此解决方案解决了以下异常:
[2017-11-16 21:19:46,938: ERROR/MainProcess] Task handler raised error: ValueError('need more than 0 values to unpack',)
Traceback (most recent call last):
File "c:userswchen8workvenvweinstalibsite-packagesbilliardpool.py", line 358, in workloop
result = (True, prepare_result(fun(*args, **kwargs)))
File "c:userswchen8workvenvweinstalibsite-packagesceleryapptrace.py", line 525, in _fast_trace_task
tasks, accept, hostname = _loc
ValueError: need more than 0 values to unpack
=====更新2018-11=====
Eventlet在子流程上存在问题。CalledProcessError:
https://github.com/celery/celery/issues/4063
https://github.com/eventlet/eventlet/issues/357
https://github.com/eventlet/eventlet/issues/413
因此,请尝试gevent
。
pip install gevent
celery -A <module> worker -l info -P gevent
这适用于window 10
+celery 4.2
+python 3.6
yes:
celery -A your_application -l info
还需要注意的是,Celery已经放弃了对Windows的支持(自v4以来),因此最好使用
pip install celery==3.1.25
3.1.25是最后一个在windows上运行的版本(刚刚在我的win10机器上测试)。不过,不需要降级flower(芹菜的浏览器监视器)。
另请参阅Windows 的常见问题解答
使用--pool=solo参数编译Celery。
示例:celery -A your-application worker -l info --pool=solo
让Celery 4在Windows上工作有两种解决方案:
- 使用eventlet、gevent或solo并发池(如果您的任务是I/O而非CPU绑定)
- 将环境变量FORKED_BY_MULTIPROESSING设置为1(这是自版本4以来导致底层台球包在Windows下失败的实际原因)
请参阅https://www.distributedpython.com/2018/08/21/celery-4-windows有关更多详细信息,
我已经使用RabbitMQ服务器运行了芹菜任务。RabbitMq比redis broker 更好更简单
运行芹菜时,请使用以下命令"芹菜-A项目名称worker--pool=solo-l info"并避免使用这个命令"celener-A project name worker-loglevel info"
这与Linux中的方法相同。将目录更改为包含芹菜任务的模块并调用"c:pythonpython" -m celery -A module.celery worker
效果良好。
Celery 4.0+还没有正式支持窗口。但出于某些开发/测试目的,它仍然可以在窗口上工作。你可以使用任何一个:
celery worker --app=app.app --pool=eventlet --loglevel=INFO
celery worker --app=app.app --pool=gevent --loglevel=INFO
celery worker --app=app.app --pool=solo --loglevel=INFO
或使用其他格式:
celery -A <app> worker --loglevel=info -P eventlet
celery -A <app> worker --loglevel=info -P gevent
celery -A <app> worker --loglevel=info -P solo
如果出现context
错误,请将gevent 20.6.2和eventlet升级到0.26.1或使用solo
https://www.distributedpython.com/2018/08/21/celery-4-windows/
使用线程,您可以在没有额外库的情况下在windows上运行芹菜
celery -A your_application worker -P threads
您仍然可以在Windows 10中使用芹菜4 0++只需使用以下命令"芹菜-项目工作人员-pool=solo-l info",而不是"芹菜-一个项目工作人员-l info "
在windows上使用芹菜4.4后,我想我可以回答这个问题。
对于芹菜4.0及以上版本,在创建芹菜实例之前,首先在python代码中设置以下环境变量。
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')
然后使用默认的池选项运行celener-worker命令。
celery worker -A <celery_file> -l info
这将同时运行带有多个子进程的celener-worker。
注意:当您使用gevent或eventlet池运行芹菜时,它会工作,但不会在windows上运行并发进程。
在windows上运行celeni进行开发。你有两种方法。
- 使用Windows作为主机
- 从安装Redis服务器https://github.com/dmajkic/redis/downloads
- 运行redis_server.exe
- 使用
Pip install Celery
安装Celery - 运行Celery命令
限制:
- 此方法仅适用于Python 3.6或更低版本
- Celery 4不支持windows
- 将使用旧Redis服务器版本
- 难以管理
4.使用WSL运行Celery和Redis服务器
- 使用本指南安装WSLhttps://www.windowscentral.com/install-windows-subsystem-linux-windows-10.
- 使用
sudo apt install redis-server
在WSL终端上安装redis服务器 - 在WSL上安装Celery并执行所有与Celery相关的命令
如果您已经熟悉Linux,WSL将是您在windows上的朋友。有一些限制,包括在WSL上支持Docker。您可以使用WSL执行大多数开发任务。
Celery从5.x版本开始在其CI中再次使用windows测试它,如果出现任何问题,您可以尝试在windows中使用它。在创建Celery实例之前,尝试在python代码中设置以下环境变量
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')
但据我所知,芹菜现在正式支持基于开发目的在windows上运行。
除了我的manage.py文件外,我还制作了一个.bat文件,代码是:
title CeleryTask
::See the title at the top.
cd
cmd /k celery -A MainProject worker -l info
所以每次我想运行芹菜时,我只需双击这个批处理文件,它就会完美地运行。事实上,你不能在窗户上使用芹菜4。