如何在窗户上运行芹菜?

时间:2016-05-16 13:49:45

标签: python celery

如何在不创建Windows服务的情况下在Windows上运行celery worker?有$ celery -A your_application worker的任何类比吗?

12 个答案:

答案 0 :(得分:27)

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

使用eventlet代替如下:

pip install eventlet
celery -A <module> worker -l info -P eventlet

它适用于我window 10 + celery 4.1 + python 3

This solution解决了以下异常:

[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

答案 1 :(得分:24)

是:

celery -A your_application -l info

另请注意芹菜有dropped support for Windows(since v4),所以最好

pip install celery==3.1.25
适用于Windows的

3.1.25 was the last version(刚刚在我的win10机器上测试过)。不过不需要降级花(浏览器显示器为芹菜)。

另请参阅FAQ for Windows

答案 2 :(得分:3)

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

答案 3 :(得分:3)

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

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

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


答案 4 :(得分:2)

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

答案 5 :(得分:1)

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/

答案 6 :(得分:1)

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

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

答案 7 :(得分:1)

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

celery -A your_application worker -P threads

答案 8 :(得分:0)

除了我的manage.py文件外,我还使用以下代码制作了.bat文件:

title CeleryTask
::See the title at the top.
cd 
cmd /k celery -A MainProject worker -l info

因此,每次我要运行celery时,我只需双击此批处理文件,即可完美运行。 而且您不能在Windows上使用芹菜4的事实是真的。

答案 9 :(得分:0)

我已经使用RabbitMQ服务器运行芹菜任务。 RabbitMq比Redis代理更好,更简单

在运行celery时,请使用以下命令“ celery -A项目名工作人员--pool = solo -l info” 并避免使用此命令“ celery -A项目名称工作者--loglevel信息”

答案 10 :(得分:0)

感觉要在Windows上使用芹菜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上运行并发进程。

答案 11 :(得分:0)

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

  1. 使用 Windows 作为主机。

限制:

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

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

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