如何在窗户上运行芹菜?

nic*_*cks 17 python celery

如何在Windows上运行芹菜工作者而不创建Windows服务?有什么比喻$ celery -A your_application worker吗?

Sam*_*hen 28

Celery 4.0+没有正式支持窗口.但它仍然适用于某些开发/测试目的的窗口.

eventlet改为使用如下:

pip install eventlet
celery -A <module> worker -l info -P eventlet
Run Code Online (Sandbox Code Playgroud)

它适用于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
Run Code Online (Sandbox Code Playgroud)

=====更新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
Run Code Online (Sandbox Code Playgroud)

这适用于window 10+ celery 4.2+python 3.6

  • 好的!在 windows server 12、python 3.7.1、celery 4.2.1、gevent 1.3.7 下工作(有点)。对我来说唯一的问题是监控这些工人。`celery *** Inspection active` 最初在工作进程打开后起作用,然后大约 5 分钟后它变得没有响应,还不知道为什么(这在 python 3.3.5、celery 4.1.0 eventlet 0.22.1 下不是问题) )。 (2认同)

小智 24

是:

celery -A your_application -l info
Run Code Online (Sandbox Code Playgroud)

另请注意,Celery已经放弃了对Windows的支持(自v4起),所以最好

pip install celery==3.1.25
Run Code Online (Sandbox Code Playgroud)

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

另请参阅Windows常见问题解答


And*_*des 20

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

例子: celery -A your-application worker -l info --pool=solo

  • 您能解释一下为什么这可以解决问题吗? (3认同)

mot*_*333 7

Celery 4.0+ 尚未正式支持 window。但出于某些开发/测试目的,它仍然可以在窗口上运行。你可以使用其中任何一个:

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
Run Code Online (Sandbox Code Playgroud)

或使用其他格式:

celery -A <app> worker --loglevel=info -P eventlet

celery -A <app> worker --loglevel=info -P gevent 

celery -A <app> worker --loglevel=info -P solo
Run Code Online (Sandbox Code Playgroud)

如果出现context错误,请将 gevent 20.6.2 和 eventlet 升级到 0.26.1 或使用solo

https://www.distributedpython.com/2018/08/21/celery-4-windows/


Dan*_*ler 6

您可以使用线程在 Windows 上运行 celery,无需额外的库

celery -A your_application worker -P threads

  • 这会禁用多个进程。所有工人都将在同一个进程中运行。如果您想要快速并发,那么这是很好的选择,但如果您的任务需要大量 CPU,那么它们就会互相阻碍。 (2认同)

nic*_*cks 5

它的完成方式与在 Linux 中相同。将目录更改为包含 celery 任务和调用的模块"c:\python\python" -m celery -A module.celery worker效果很好。

  • @MosesKoledoye 不是`PYTHONPATH` 仅用于`import` 语句吗?如果没有`PATH` 中的`Python\Scripts` 目录或调用`python -m`,如何找到Celery 二进制文件? (2认同)

Bjo*_*iel 5

有两种解决方法可使Celery 4在Windows上运行:

  • 使用eventlet,gevent或solo并发池(如果您的任务为I / O且不受CPU限制)
  • 设置环境变量FORKED_BY_MULTIPROCESSING = 1(这是从版本4开始实际上导致基础台球包在Windows下失败的原因)

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



Tej*_*vva 5

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

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


小智 5

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