使Celery 4在Windows上运行的2种方法
该博客文章中使用的源代码可在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种方法相关推荐
- VMware Workstation Pro 无法在Windows上运行的解决方法
报错信息 : VMware Workstation Pro 无法在Windows上运行的解决方法 解决办法 1.方法二:卸载补丁 以下三个会产生相关影响,因此在控制面板里找到相关的,然后卸之. Oct ...
- 如何在Windows上运行Redis?
如何在Windows上运行Redis? Redis下载页面似乎只提供* nix选项. 我可以在Windows上本地运行Redis吗? #1楼 MS Open Tech最近提供了Redis版本,可以在G ...
- 电脑显示没有被指定在上运行_win10系统运行程序提示“dll没有被指定在windows上运行”的办法...
有关win10系统运行程序提示"dll没有被指定在windows上运行"的操作方法想必大家有所耳闻.但是能够对win10系统运行程序提示"dll没有被指定在windows ...
- linux运行容器,容器与云|如何在 Windows 上运行 Linux 容器
1.概述 现在能够在 Windows 10 和 Windows 服务器上运行 Docker 容器了,它是以 Ubuntu 作为宿主基础的. 想象一下,使用你喜欢的 Linux 发行版--比如 Ubun ...
- VMware Workstation Pro 无法在Windows上运行的解决方案
提示"VMware Workstation Pro 无法在Windows上运行",这问题是由于微软的更新程序引起的,导致老版本的VMware Workstation Pro 无法运 ...
- apache hive_通过6个简单的步骤在Windows上运行Apache Hive
apache hive 注意 :您需要安装cygwin才能运行本教程,因为Hadoop(Hive所需)需要cygwin才能在Windows上运行. 至少,系统中必须存在Basic,Net(OpenSS ...
- 通过6个简单的步骤在Windows上运行Apache Hive
注意 :您需要安装cygwin才能运行本教程,因为Hadoop(Hive需要)需要cygwin才能在Windows上运行. 至少,系统中必须存在Basic,Net(OpenSSH,tcp_wrappe ...
- VMware Workstation Pro 无法在Windows 上运行的 解决办法
一.问题描述 国庆期间window10来了一次更新,导致VMware Workstation 无法在windows上运行,我的虚拟机版本是VMware Pro14.有两种方法解决该问题,第一种是直接卸 ...
- 双用户windows linux系统,Windows与Linux合二为一?终于能在windows上运行Linux了!
原标题:Windows与Linux合二为一?终于能在windows上运行Linux了! 目前在PC端操作系统市场份额中,微软旗下的windows系统占据超过50%的比例. 作为微软旗下发布的产品之一, ...
最新文章
- 内存卡损坏 linux 修复,Linux系统恢复工具
- 如何在windows下的Python开发工具IDLE里安装其他模块
- hdu4884 模拟
- 安卓电视版linux,MythTV 30.0 发布,前端支持选择Android电视设备
- 从操作系统层面描述线程的五种状态
- python自学到大牛_开始学习Python+一位大牛整理的Python资源
- db2审计功能db2audit导致的数据库宕机问题处理
- 没有对比就没有伤害,优秀的代码VS糟糕的代码
- 在jsp页面通过JDBC访问数据库,并取出数据显示到页面上_试验mysql、sqlserver2008(亲测成功)...
- docker run -di -p 日志_docker随手笔记第十一节 portainer.io安装使用,比k8s简单
- 图之Dijkstra算法
- 树莓派如何连接WiFi
- java语言签到定位系统_百度地图定位签到功能
- ipad开发对表格视图的基本实现
- 【LeetCode】179. 最大数
- Python基于OpenCV的交通路口红绿灯控制系统设计
- 火灾隐患是查不完的,消防监管要着力于提升单位消防能力
- 如何从Matlab中导出清晰的结果图片
- 爬虫初上手之爬取QQ音乐!
- 生态 | 人大金仓与超聚变的多个产品完成兼容认证
热门文章
- picpick尺子像素大小精度不够准确_picpick尺子像素大小精度不够准确_【论文解读】像素级分割里程碑算法——FCN全卷积神经网络......
- C语言:在文件的指定位置实现局部修改,而无需重写文件的其他部分
- 【Arch】Android系统简介
- 男人应该做的50件事(1-16)
- 前端-Excel在线预览
- html加载背景图片
- 中国天气网api接口
- ElasticSearch--索引与类型
- 【20190405】算法-输入一个字符串,按字典序打印出该字符串中字符的所有排列
- 整数拆分 python_LeetCode 343. 整数拆分 | Python