如何在windows上运行celery?

问题描述 投票:0回答:13

如何在不创建 Windows 服务的情况下在 Windows 上运行 celery worker?

$ celery -A your_application worker
有什么比喻吗?

python celery
13个回答
74
投票

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


28
投票

是的:

celery -A your_application -l info

还要注意 Celery 放弃了对 Windows 的支持(从 v4 开始),所以最好

pip install celery==3.1.25

3.1.25 是适用于 Windows 的最后一个版本(刚刚在我的 win10 机器上测试过)。不过不需要降级花(芹菜的浏览器监视器)。

另见 Windows 常见问题解答


11
投票

使用 --pool=solo 参数编译 Celery。

例子:

celery -A your-application worker -l info --pool=solo


8
投票

有两种解决方法可以让 Celery 4 在 Windows 上工作:

  • 使用 eventlet、gevent 或 solo 并发池(如果您的任务是 I/O 而不是 CPU 绑定)
  • 设置环境变量 FORKED_BY_MULTIPROCESSING=1(这实际上是导致底层 billiard 包从版本 4 开始在 Windows 下失败的原因)

有关详细信息,请参阅https://www.distributedpython.com/2018/08/21/celery-4-windows



7
投票

我已经使用 RabbitMQ 服务器运行了 celery 任务。 RabbitMq 比 redis broker 更好更简单

在运行 celery 时使用这个命令“celery -A project-name worker --pool=solo -l info” 并避免使用此命令“celery -A project-name worker --loglevel info”


5
投票

它的完成方式与在 Linux 中相同。将目录更改为包含 celery 任务的模块并调用

"c:\python\python" -m celery -A module.celery worker
效果很好。


4
投票

您仍然可以在 Windows 10+ 上使用 celery 4 0+ 只需使用此命令“celery -A projet worker - -pool=solo - l info”而不是“celery - A projet worker -l info


4
投票

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/


4
投票

您可以通过使用线程在没有额外库的情况下在 Windows 上运行 celery

celery -A your_application worker -P threads


0
投票

在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 和多个子进程。

注意:当您使用 geventeventlet 池运行 celery 时,它会工作,但不会在 Windows 上运行并发进程。


0
投票

在windows上运行celery进行开发。你有两种方法。

  1. 使用 Windows 作为主机。

限制:

  • 此方法仅支持 Python 3.6 或更低版本。
  • Celery 4 不提供对 windows 的支持
  • 将使用旧的 Redis 服务器版本。
  • 难以管理

4。使用 WSL 运行 Celery 和 Redis-server

如果您已经熟悉 Linux,WSL 将是您在 Windows 上的朋友。 几乎没有限制,包括支持 WSL 上的 Docker。您可以使用 WSL 执行大部分开发任务。


0
投票

Celery 正在从版本 5.x 开始再次在其 CI 中使用 Windows 对其进行测试,如果出现任何问题,您可以尝试在 Windows 中使用它,请尝试在创建 celery 实例之前在 python 代码中设置以下环境变量

os.environ.setdefault('FORKED_BY_MULTIPROCESSING', '1')


-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 的事实是真的。

© www.soinside.com 2019 - 2024. All rights reserved.