如何在 Windows 机器上用 django 测试 celery
Posted
技术标签:
【中文标题】如何在 Windows 机器上用 django 测试 celery【英文标题】:How to test celery with django on a windows machine 【发布时间】:2018-12-31 00:35:24 【问题描述】:我正在寻找有关如何在基于 Linux 的服务器上部署之前在我的 Windows 机器上测试 django celery 的资源、文档或建议。
任何有用的答案都将受到赞赏和接受。
【问题讨论】:
【参考方案1】:Celery(因为另一个答案指出的版本 4)不支持 Windows(来源:http://docs.celeryproject.org/en/latest/faq.html#does-celery-support-windows)。即便如此,您也有一些选择:
1) 使用task_always_eager=True
。这将同步运行您的任务——通过它,您可以验证您的代码是否正在执行它应该执行的操作。即使在 Windows 上也能同步运行任务。
更多信息:http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-task_always_eager
2) 使用 WSL(适用于 Linux 的 Windows 子系统)。
更多信息:https://docs.microsoft.com/en-us/windows/wsl/install-win10#install-the-windows-subsystem-for-linux
3) 使用适用于 Windows 的 Docker。您可以在容器内运行 Celery Worker(s) 和 Celery Beat。
更多信息:https://docs.docker.com/docker-for-windows/
就个人而言,我使用选项 1) 进行单元测试,使用选项 2) 进行开发。
【讨论】:
据我所知,您只能将 Celery 与 WSLv2 一起使用...或者不能? 官方不支持,但你可以在 Windows 上原生运行 Celery(所以没有 WSL、Docker 等)。使用最新版本 4.4.x 测试。【参考方案2】:有两种解决方法可以让 Celery 在 Windows 上(本机)工作 - 因此能够像在 Linux 上一样对其进行测试。
使用 eventlet、gevent 或单独的并发池(如果您的任务是 I/O 且不受 CPU 限制) 设置环境变量 FORKED_BY_MULTIPROCESS=1(这实际上是导致底层台球包自版本 4 起在 Windows 下失败的原因)https://www.distributedpython.com/2018/08/21/celery-4-windows/
【讨论】:
【参考方案3】:其实你不能。从 Celery 4.x 开始,由于资源不足,不再支持 Windows。这就是official documentation of celery 所说的。
【讨论】:
【参考方案4】:不知道现在windows是否支持celery,但我可以直接在windows上使用celery,没有任何其他解决方法。
当前使用pip install celery==5.0.5
安装它。我还能够通过 Redis 作为代理从我的 Django 应用程序中成功运行后台任务并执行其他功能。
否则,开发目的的最佳方式将是使用其他人指出的 WSL,尽管它有自己的优点和缺点。
【讨论】:
以上是关于如何在 Windows 机器上用 django 测试 celery的主要内容,如果未能解决你的问题,请参考以下文章
如何将 elixir 应用程序从 Windows 开发机器部署到 Ubuntu 服务器