该博客文章中使用的源代码可在GitHub上找到。
自Celery 4.x版本起,Celery不再正式支持Windows。尽管Celery 3确实支持Windows,但它与Celery 4不兼容。因此,如果您必须使用Windows来执行某些(一项)Celery任务,则整个基础架构都将使用传统的Celery版本。这当然是不可接受的情况。

但是,即使Celery放弃了Windows支持,我仍将向您展示两个简单的解决方法,以使Celery 4在Windows上正常播放。

芹菜并发池
使Celery 4在Windows上运行的第一个策略与并发池有关。简而言之,并发池实现决定了Celery worker如何并行执行任务。Celery默认使用prefork实现,该实现会生成进程(并且限于每个CPU少数几个进程),而Eventlet生成线程(其中数百个线程,不会费劲)。

Celery随附多种并发池类型供您选择:

前叉
事件
事态
独奏
Prefork池更适合于CPU绑定的任务,而如果您受I / O约束,则eventlet池更适合工作。深入讨论不同的选项是另一篇博客中另一项任务,在此期间,我建议您查看有关文档并发和并发性Eventlet。

策略1:Windows上的带事件,gevent或solo的芹菜
实际上,使Celery 4与Windows不兼容的原因仅仅是默认的prefork并发池实现。换句话说,如果您要完成的Celery任务可以很好地处理eventlet,gevent或solo(solo是一个阻塞的单线程执行池),则可以在Windows中使用这些执行池中的任何一个运行Celery 4。

克隆GitHub存储库,创建虚拟环境并安装pip要求:

C:\Developer\celery-4-windows>virtualenv celery-4-windows
C:\Developer\celery-4-windows>activate celery-4-windows
(celery-4-windows) C:\Developer\celery-4-windows>pip install -r requirements.txt
您可以使用以下任何池参数启动Celery worker:

(celery-windows) C:\Developer\celery-4-windows>celery worker --app=app.app --pool=eventlet --loglevel=INFO
(celery-windows) C:\Developer\celery-4-windows>celery worker --app=app.app --pool=gevent --loglevel=INFO
(celery-windows) C:\Developer\celery-4-windows>celery worker --app=app.app --pool=solo --loglevel=INFO
打开一个新的命令行窗口以异步执行任务,您的Celery worker重新回到Windows业务:

C:\Developer\celery-4-windows>activate celery-4-windows
(celery-4-windows) C:\Developer\celery-4-windows>python app.py
策略2:FORKED_BY_MULTIPROCESSING
如果我们进行更深入的研究,就会发现默认的prefork并发池实现在Windows上不再起作用的原因是因为Celery台球程序包。Billiard本身是Python mulitprocessing软件包的分支,具有一些修复和改进。

台球FORKED_BY_MULTIPROCESSING=1默认情况下用于设置记录不太好的环境变量。Celery依次检查是否FORKED_BY_MULTIPROCESSING设置为确定是否禁用了分叉(这是操作系统的事情)。由于台球版本Celery 4依赖于台球,因此不再设置台球FORKED_BY_MULTIPROCESSING,这又会导致Windows上的前叉池失败(请查看前叉源代码和台球更改日志)。

简而言之,您可以通过设置Windows环境变量来解决此问题。转到:系统属性=>环境变量=>用户或系统变量=>新建…:

Variable name: FORKED_BY_MULTIPROCESSING
Variable value: 1
打开一个新的命令提示符窗口,以拾取新的环境变量。您可以在不使用pool参数的情况下启动Celery worker:

C:\Developer\celery-4-windows>activate celery-4-windows
(celery-windows) C:\Developer\celery-4-windows>celery worker --app=app.app --loglevel=INFO
打开一个新的命令行窗口以异步执行任务,您的Celery worker只能使用默认的prefork池(实际上是通过多处理来分叉的):

C:\Developer\celery-4-windows>activate celery-4-windows
(celery-4-windows) C:\Developer\celery-4-windows>python app.py
该博客文章中使用的源代码可在GitHub上找到。
注释

使Celery 4在Windows上运行的2种方法相关推荐

  1. VMware Workstation Pro 无法在Windows上运行的解决方法

    报错信息 : VMware Workstation Pro 无法在Windows上运行的解决方法 解决办法 1.方法二:卸载补丁 以下三个会产生相关影响,因此在控制面板里找到相关的,然后卸之. Oct ...

  2. 如何在Windows上运行Redis?

    如何在Windows上运行Redis? Redis下载页面似乎只提供* nix选项. 我可以在Windows上本地运行Redis吗? #1楼 MS Open Tech最近提供了Redis版本,可以在G ...

  3. 电脑显示没有被指定在上运行_win10系统运行程序提示“dll没有被指定在windows上运行”的办法...

    有关win10系统运行程序提示"dll没有被指定在windows上运行"的操作方法想必大家有所耳闻.但是能够对win10系统运行程序提示"dll没有被指定在windows ...

  4. linux运行容器,容器与云|如何在 Windows 上运行 Linux 容器

    1.概述 现在能够在 Windows 10 和 Windows 服务器上运行 Docker 容器了,它是以 Ubuntu 作为宿主基础的. 想象一下,使用你喜欢的 Linux 发行版--比如 Ubun ...

  5. VMware Workstation Pro 无法在Windows上运行的解决方案

    提示"VMware Workstation Pro 无法在Windows上运行",这问题是由于微软的更新程序引起的,导致老版本的VMware Workstation Pro 无法运 ...

  6. apache hive_通过6个简单的步骤在Windows上运行Apache Hive

    apache hive 注意 :您需要安装cygwin才能运行本教程,因为Hadoop(Hive所需)需要cygwin才能在Windows上运行. 至少,系统中必须存在Basic,Net(OpenSS ...

  7. 通过6个简单的步骤在Windows上运行Apache Hive

    注意 :您需要安装cygwin才能运行本教程,因为Hadoop(Hive需要)需要cygwin才能在Windows上运行. 至少,系统中必须存在Basic,Net(OpenSSH,tcp_wrappe ...

  8. VMware Workstation Pro 无法在Windows 上运行的 解决办法

    一.问题描述 国庆期间window10来了一次更新,导致VMware Workstation 无法在windows上运行,我的虚拟机版本是VMware Pro14.有两种方法解决该问题,第一种是直接卸 ...

  9. 双用户windows linux系统,Windows与Linux合二为一?终于能在windows上运行Linux了!

    原标题:Windows与Linux合二为一?终于能在windows上运行Linux了! 目前在PC端操作系统市场份额中,微软旗下的windows系统占据超过50%的比例. 作为微软旗下发布的产品之一, ...

最新文章

  1. 内存卡损坏 linux 修复,Linux系统恢复工具
  2. 如何在windows下的Python开发工具IDLE里安装其他模块
  3. hdu4884 模拟
  4. 安卓电视版linux,MythTV 30.0 发布,前端支持选择Android电视设备
  5. 从操作系统层面描述线程的五种状态
  6. python自学到大牛_开始学习Python+一位大牛整理的Python资源
  7. db2审计功能db2audit导致的数据库宕机问题处理
  8. 没有对比就没有伤害,优秀的代码VS糟糕的代码
  9. 在jsp页面通过JDBC访问数据库,并取出数据显示到页面上_试验mysql、sqlserver2008(亲测成功)...
  10. docker run -di -p 日志_docker随手笔记第十一节 portainer.io安装使用,比k8s简单
  11. 图之Dijkstra算法
  12. 树莓派如何连接WiFi
  13. java语言签到定位系统_百度地图定位签到功能
  14. ipad开发对表格视图的基本实现
  15. 【LeetCode】179. 最大数
  16. Python基于OpenCV的交通路口红绿灯控制系统设计
  17. 火灾隐患是查不完的,消防监管要着力于提升单位消防能力
  18. 如何从Matlab中导出清晰的结果图片
  19. 爬虫初上手之爬取QQ音乐!
  20. 生态 | 人大金仓与超聚变的多个产品完成兼容认证

热门文章

  1. picpick尺子像素大小精度不够准确_picpick尺子像素大小精度不够准确_【论文解读】像素级分割里程碑算法——FCN全卷积神经网络......
  2. C语言:在文件的指定位置实现局部修改,而无需重写文件的其他部分
  3. 【Arch】Android系统简介
  4. 男人应该做的50件事(1-16)
  5. 前端-Excel在线预览
  6. html加载背景图片
  7. 中国天气网api接口
  8. ElasticSearch--索引与类型
  9. 【20190405】算法-输入一个字符串,按字典序打印出该字符串中字符的所有排列
  10. 整数拆分 python_LeetCode 343. 整数拆分 | Python