celery开发中踩的坑
celery开发中踩的坑
celery连接redis
当使用redis做broker,redis连接需要密码时:
BROKER_URL='redis://:xxxxx@127.0.0.1:6379/0',
其中xxxxx是密码,密码前必须加冒号。
报错:Celery ValueError: not enough values to unpack (expected 3, got 0)
test.py
import time
from celery import Celery
broker = 'redis://localhost:6379'
backend = 'redis://localhost:6379/0'
celery = Celery('my_task', broker=broker, backend=backend)
@celery.task
def add(x,y):
time.sleep(2.0)
return x+y
test1.py
from test import add result = add.delay(2,8)
while 1:
if result.ready():
print(result.get())
break
报错场景还原
1.运行worker
celery -A test worker --loglevel=info
输出:
(anaconda) C:\Pycham\redis>celery -A test worker --loglevel=info -------------- celery@BOS3UA7Y740V4W9 v4.3.0 (rhubarb)
---- **** -----
--- * *** * -- Windows-10-10.0.17763-SP0 2019-06-01 17:02:01
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: my_task:0x2200a35b128
- ** ---------- .> transport: redis://:**@localhost:6379//
- ** ---------- .> results: redis://:**@localhost:6379/0
- *** --- * --- .> concurrency: 4 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery [tasks]
. test.add [2019-06-01 17:02:01,524: INFO/MainProcess] Connected to redis://:**@localhost:6379//
[2019-06-01 17:02:01,556: INFO/MainProcess] mingle: searching for neighbors
[2019-06-01 17:02:02,620: INFO/MainProcess] mingle: all alone
[2019-06-01 17:02:02,759: INFO/MainProcess] celery@BOS3UA7Y740V4W9 ready.
[2019-06-01 17:02:03,309: INFO/SpawnPoolWorker-2] child process 16140 calling self.run()
[2019-06-01 17:02:03,333: INFO/SpawnPoolWorker-4] child process 10908 calling self.run()
[2019-06-01 17:02:03,372: INFO/SpawnPoolWorker-3] child process 2400 calling self.run()
[2019-06-01 17:02:03,434: INFO/SpawnPoolWorker-1] child process 13848 calling self.run()
2.运行test1.py
test1.py输出
Traceback (most recent call last):
File "C:/Pycham/redis/test1.py", line 7, in <module>
print(result.get())
File "C:\Pycham\anaconda\lib\site-packages\celery\result.py", line 215, in get
self.maybe_throw(callback=callback)
File "C:\Pycham\anaconda\lib\site-packages\celery\result.py", line 331, in maybe_throw
self.throw(value, self._to_remote_traceback(tb))
File "C:\Pycham\anaconda\lib\site-packages\celery\result.py", line 324, in throw
self.on_ready.throw(*args, **kwargs)
File "C:\Pycham\anaconda\lib\site-packages\vine\promises.py", line 244, in throw
reraise(type(exc), exc, tb)
File "C:\Pycham\anaconda\lib\site-packages\vine\five.py", line 195, in reraise
raise value
ValueError: not enough values to unpack (expected 3, got 0)
worker输出:
[2019-06-01 17:03:59,484: INFO/MainProcess] Received task: test.add[33ee3342-064e-47ef-8f8b-95d65955fd89]
[2019-06-01 17:03:59,491: ERROR/MainProcess] Task handler raised error: ValueError('not enough values to unpack (expected 3, got 0)')
Traceback (most recent call last):
File "c:\pycham\anaconda\lib\site-packages\billiard\pool.py", line 358, in workloop
result = (True, prepare_result(fun(*args, **kwargs)))
File "c:\pycham\anaconda\lib\site-packages\celery\app\trace.py", line 544, in _fast_trace_task
tasks, accept, hostname = _loc
ValueError: not enough values to unpack (expected 3, got 0)
解决:
.安装eventlet
pip install eventlet
现在我们重新来一遍
1.运行worker
celery -A test worker -l info -P eventlet
2.运行test1.py
10
此时worker的输出
(anaconda) C:\Pycham\redis>celery -A test worker -l info -P eventlet -------------- celery@BOS3UA7Y740V4W9 v4.3.0 (rhubarb)
---- **** -----
--- * *** * -- Windows-10-10.0.17763-SP0 2019-06-01 17:08:45
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app: my_task:0x16e16d0c0f0
- ** ---------- .> transport: redis://:**@localhost:6379//
- ** ---------- .> results: redis://:**@localhost:6379/0
- *** --- * --- .> concurrency: 4 (eventlet)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this
worker)
--- ***** -----
-------------- [queues]
- *** --- * --- .> concurrency: 4 (eventlet)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery [tasks]
. test.add -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
-------------- [queues]
.> celery exchange=celery(direct) key=celery [tasks]
. test.add [2019-06-01 17:08:45,387: INFO/MainProcess] Connected to redis://:**@localhost:6379//
[2019-06-01 17:08:45,401: INFO/MainProcess] mingle: searching for neighbors
[2019-06-01 17:08:46,434: INFO/MainProcess] mingle: all alone
[2019-06-01 17:08:46,452: INFO/MainProcess] pidbox: Connected to redis://:**@localhost:6
379//.
[2019-06-01 17:08:46,458: INFO/MainProcess] celery@BOS3UA7Y740V4W9 ready.
[2019-06-01 17:09:31,021: INFO/MainProcess] Received task: test.add[82a08465-b8d5-4371-8
edd-1f5b3c922102]
[2019-06-01 17:09:33,034: INFO/MainProcess] Task test.add[82a08465-b8d5-4371-8edd-1f5b3c
922102] succeeded in 2.0s: 10
celery开发中踩的坑的更多相关文章
- 转:Flutter开发中踩过的坑
记录一下入手Flutter后实际开发中踩过的一些坑,这些坑希望后来者踩的越少越好.本文章默认读者已经掌握Flutter初步开发基础. 坑1问题:在debug模式下,App启动第一个页面会很慢,甚至是黑 ...
- 总结微信小程序开发中遇到的坑
总结微信小程序开发中遇到的坑,一些坑你得一个一个的跳啊,/(ㄒoㄒ)/~~ 1,页面跳转和参数传递实例 首先说一下我遇到的需求有一个我的消息页面,里面的数据都是后端返回的,返回的数据大致如下,有一个是 ...
- 在kotlin用jni调用c++的dll中踩的坑
在kotlin用jni调用c++的dll中踩的坑 can't find dependents libraries 不是个有效的32位程序(或者是?????32??????) 常规检查 java 指针 ...
- 【EasyUI总结】EasyUI开发中遇到的坑
普遍: 1.easyui在书写键值对的时候要注意是否要加引号,在需要加引号的地方不加则无法渲染: datagrid数据网格: 1.datagrid默认请求方式是post,如果要使用分页功能pagina ...
- AngularJS移动开发中的各种坑
捂脸,辛酸泪ing...... 本文主要涉及部分在移动设备上特有的问题. 相对来说,Jquery侧重DOM操作,AngularJS是以视图模型和双向绑定为核心的. DOM操作的问题 避免使用 jQue ...
- vuejs 开发中踩到的坑
用 v-for 循环式 每个item的值相等的情况下,会影响v-model的双向绑定: Modal 组件开发,主要用slot 标签来实现 <template> <transitio ...
- 那些年,我们在Django web开发中踩过的坑(一)——神奇的‘/’与ajax+iframe上传
一.上传图片并在前端展示 为了避免前端整体刷新,我们采用ajax+iframe(兼容所有浏览器)上传,这样用户上传之后就可以立即看到图片: 上传前: 上传后: 前端部分html: <form s ...
- vue项目开发中踩过的坑
一.路由 这两天移动端的同事在研究vue,跟我说看着我的项目做的,子路由访问的时候是空白的,我第一反应是,不会模块没加载进来吧,还是....此处省略一千字... 废话不多说上代码 路由代码 { pat ...
- 不要在PHP7中踩这些坑
PHP是当今仍然是最流行的Web开发语言,目前在所有使用服务端编程语言的网站中,超过83%的站点在使用PHP.PHP7在性能方面实现跨越式的提升,然后有些坑我们还是要提醒PHPer不要踩. 1. 不要 ...
随机推荐
- 套接字之recvfrom系统调用
recvfrom系统调用通过用户传入的接收空间构造msghdr,并且调用sock_recvmsg,该函数调用socket操作的recvmsg函数sock->ops->recvmsg,ipv ...
- 第九周学习总结&实验报告七
实验报告: 实验任务详情: 完成火车站售票程序的模拟. 要求: (1)总票数1000张: (2)10个窗口同时开始卖票: (3)卖票过程延时1秒钟: (4)不能出现一票多卖或卖出负数号票的情况. 实验 ...
- Oracle中关键字like的使用总结
Like 模糊查询 占位符 % 任意个数字符 _ 一个字符 查询 用户名以‘S’开头的员工信息 Select * from emp where ename like 'S%' 查询用户名第二个字母 ...
- Ruby的异常处理
Ruby在处理0.1+0.2是会出现精度问题: 许多语言都有类似问题,详见网址:http://0.30000000000000004.com/ Ruby的异常处理 如果异常处理范围是整个方法体,可以省 ...
- C++构造函数调用虚函数的后果
#include <iostream> class cx { public: virtual void func() { std::cout << "func&quo ...
- java.sql.SQLSyntaxErrorException: ORA-01795: 列表中的最大表达式数为 1000
后台报了一些异常日志,查阅后发现在 oracle 数据库中使用 in 关键字条件不能超过 1000 个,当时写查询语句时没有关注这个问题 总结一下解决方法 1.分多次查询,对查询要求不高的话.把入参的 ...
- MySQL MGR 单主模式下master角色切换规则
MGR单主模式,master节点可读可写,其余节点都是只读.当配置MGR为单主模式,非master节点自动开启super_read_only 当可读可写的节点异常宕机,会进行怎样的切换?在选择新的可写 ...
- tomcat 日志拆分
一.用cronolog分割tomcat的catalina.out文件 1.编译安装cronologwget http://cronolog.org/download/cronolog-1.6.2.ta ...
- Cascader 级联选择器
当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择. 基础用法 有两种触发子菜单的方式 只需为 Cascader 的options属性指定选项数组即可渲染出一个级联选择器. 通过expa ...
- jquery.validate.js使用之自定义表单验证规则
jquery.validate.js使用之自定义表单验证规则,下面列出了一些常用的验证法规则 jquery.validate.js演示查看 jquery validate强大的jquery表单验证插件 ...