导言:学习Celery的文档
学习的文档是celery的中文文档
然后这个中文文档没整明白,不过我找到了一个更好用的学习文档
在学习以上者两个之前,提前提示,在windows上使用celery各种不爽。celery不是天然的支持windows的,而celery的中间人,redis或者rabbitmq都对windows很不友好,此坑慎入。
一、windows下使用celery
安装rabbitmq有点麻烦,而且会遇到一些奇奇怪怪的问题,所以中间人建议选择redis。
redis的安装,使用菜鸟教程就很方便。,注意要把redis添加到环境变量中去,这样以后启动的时候也比较方便。
redis服务的启动:redis-server
,注意用终端打开redis服务以后,不要把这个终端关了,否则redis服务也关闭了。
redis和celery到底是如何交互的
使用过程
在执行任务时,启动的celery服务会有提示:
但是我并不能获取任务是否执行完成
大坑小坑
- 在使用redis的时候,遇到
rdbSave failed in qfork: Permission denied
的错误。 - windows在celery下会进行任务接收但是不执行
这是因为windows不支持celery,需要用eventlet支持异步的运行,废物玩意。
先下载:pip install eventlet
然后运行celery的使用命令改为:celery -A celery_test worker --loglevel=info -P eventlet -c 10
- 坑2解决以后,新的问题出现了。使用eventlet以后,celery 链接redis发生了报错。
网上找了半天原因,最后感谢大哥。
原来是celery的broker地址不能写localhost
,需要写成127.0.0.1
,我服了。 - 坑3解决以后,程序成功的运行了,但是运行了一段时间以后,redis又又又报错了。
原因:
由于启动redis使用默认配置,持久化会在当前目录进行。
启动redis时在root权限目录下启动的,写权限不足,导致持久化时进程失败。
解决方案:
1.进入配置文件, 查看持久化文件dump.rdb存放目录
发现windows内的dump.rdb是默认储存在安装redis的目录中的,但是安装redis的目录是没有写入权限的,我安装的地址是C:\Program files\redies
,于是我修改了这个文件夹的写入权限(文件-》属性-》安全-》权限编辑),问题得到了解决。
如果使用RabbitMQ
以下内容虽然有用,但是还有其他坑,所以windows下尽量放弃RabbitMQ
由于使用的是windows,RabbitMQ需要额外的依赖,官方推荐用choco install rabbitmq
下载,但是我的电脑没有安装choco(这是一个软件安装工具,类似于mac的homebrew)
知乎上查询以后,choco在Windows CMD 上的安装命令:@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
注意使用管理者的方式运行CMD