如何在不创建 Windows 服务的情况下在 Windows 上运行 celery worker?
$ 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:\users\wchen8\work\venv\weinsta\lib\site-packages\billiard\pool.py", line 358, in workloop
result = (True, prepare_result(fun(*args, **kwargs)))
File "c:\users\wchen8\work\venv\weinsta\lib\site-packages\celery\app\trace.py", line 525, in _fast_trace_task
tasks, accept, hostname = _loc
ValueError: need more than 0 values to unpack
===== 2018-11 更新 =====
Eventlet 在 subprocess.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
是的:
celery -A your_application -l info
还要注意 Celery 放弃了对 Windows 的支持(从 v4 开始),所以最好
pip install celery==3.1.25
3.1.25 是适用于 Windows 的最后一个版本(刚刚在我的 win10 机器上测试过)。不过不需要降级花(芹菜的浏览器监视器)。
使用 --pool=solo 参数编译 Celery。
例子:
celery -A your-application worker -l info --pool=solo
有两种解决方法可以让 Celery 4 在 Windows 上工作:
有关详细信息,请参阅https://www.distributedpython.com/2018/08/21/celery-4-windows
我已经使用 RabbitMQ 服务器运行了 celery 任务。 RabbitMq 比 redis broker 更好更简单
在运行 celery 时使用这个命令“celery -A project-name worker --pool=solo -l info” 并避免使用此命令“celery -A project-name worker --loglevel info”
它的完成方式与在 Linux 中相同。将目录更改为包含 celery 任务的模块并调用
"c:\python\python" -m celery -A module.celery worker
效果很好。
您仍然可以在 Windows 10+ 上使用 celery 4 0+ 只需使用此命令“celery -A projet worker - -pool=solo - l info”而不是“celery - A projet worker -l info
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
celery -A your_application worker -P threads
在windows上用celery 4.4感觉要自杀后,我想我可以回答这个问题了
对于celery 4.0及以上版本,在创建celery实例之前,首先在python代码中设置以下环境变量。
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')
然后使用默认池选项运行 celery worker 命令。
celery worker -A <celery_file> -l info
这将同时运行 celery worker 和多个子进程。
注意:当您使用 gevent 或 eventlet 池运行 celery 时,它会工作,但不会在 Windows 上运行并发进程。
在windows上运行celery进行开发。你有两种方法。
Pip install Celery
安装芹菜。限制:
4。使用 WSL 运行 Celery 和 Redis-server
sudo apt install redis-server
安装redis-server。如果您已经熟悉 Linux,WSL 将是您在 Windows 上的朋友。 几乎没有限制,包括支持 WSL 上的 Docker。您可以使用 WSL 执行大部分开发任务。
Celery 正在从版本 5.x 开始再次在其 CI 中使用 Windows 对其进行测试,如果出现任何问题,您可以尝试在 Windows 中使用它,请尝试在创建 celery 实例之前在 python 代码中设置以下环境变量
os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')
除了我的 manage.py 文件之外,我还使用以下代码制作了一个 .bat 文件:
title CeleryTask
::See the title at the top.
cd
cmd /k celery -A MainProject worker -l info
所以每次我想运行celery的时候,只要双击这个批处理文件就可以完美运行了。 你不能在 Windows 上使用 celery 4 的事实是真的。