使用Celery遇到的坑
通过Celery操作云通讯,发送短信验证码报错{'172001':'网络错误'}针对Windows系统,Mac系统不晓得
1、检查是否取消全局证书验证
import ssl
# 全局取消证书验证
ssl._create_default_https_context = ssl._create_unverified_context
2、检查相关的配置参数是否有错误。
比如端口,请求地址,主账号,APPID,API版本等是否配置正确,有一个出问题就会报{'172001':'网络错误'}
3、检查参数传递是否正常,
比如手机号、验证码,核心代码是否能接受到对应的值,会提示发送失败
4、解释器版本问题【最重要的一点】。
Python解释器版本的问题,celery的版本不兼容Python3.7以上的版本;
3.6及以下的版本可以正常使用,如果使用的是Python3.7以上的版本并且配置参数等都没有问题就会出现{'172001':'网络错误'}问题;
降低Python解释器版本3.6及以下就不会出现此问题,celery任何版本都可以正常使用。
额外补充:
celery无法在Windows10 #4081 下运行任务
[2018-01-12 19:08:15,545: INFO/MainProcess] Received task: tasks.add[5d387722-5389-441b-9b01-a619b93b4702]
[2018-01-12 19:08:15,550: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)',)
Traceback (most recent call last):
File "d:\programmingsoftware\python35\lib\site-packages\billiard\pool.py", line 358, in workloop
result = (True, prepare_result(fun(*args, **kwargs)))
File "d:\programmingsoftware\python35\lib\site-packages\celery\app\trace.py", line 525, in _fast_trace_task
tasks, accept, hostname = _loc
ValueError: not enough values to unpack (expected 3, got 0)
解决方式:
使用事件池实现(“ -P eventlet”命令行选项)来解决此问题
pip install eventlet
celery -A <mymodule> worker -l info -P eventlet