django-celery-results,Django3.0
姜戈2.1.7芹菜4.3.0示例,解决任务处理程序引发错误:ValueErro_11229407的技术博客_博客
原文地址:姜戈使用示例,解决任务处理程序引发错误:ValueError(没有足够的值来取消保存.
大蟒版本3 .7 .2世纪-分布式任务队列简介:
芹菜是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。
它是一个专注于实时处理的任务队列,同时也支持任务调度。
使用情景:用户发起请求,并等待反应返回。在某些视图中,可能需要执行一段耗时的程序,那么用户就会等待很长时间,造成不好的用户体验,比如发送邮件、手机验证码等。
使用芹菜后,情况就不一样了。
解决:将耗时的程序放到芹菜中执行。
点击查看芹菜官方网站点击查看芹菜中文文档芹菜名词:
任务任务:就是一个计算机编程语言函数。队列队列:将需要执行的任务加入到队列中。工人工人:在一个新进程中,负责执行队列中的任务。代理人经纪人:负责调度,需要提前部署好雷迪斯。安装包:
pip3安装-你芹菜
pip3安装姜戈-芹菜==3.3.0
pip3安装芹菜[librabbitmq,redis,auth,msgpack]版本
芹菜
示例1)在assetinfo/views.py文件中创建视图说你好。
导入时间
.
def说你好(请求):
打印(你好.)
时间。睡眠(2)
打印(世界.)
返回HttpResponse(hello world)2)在assetinfo/urls.py中配置。
urlpatterns=[
#例如:/assetinfo/sayhello
path(sayhello ,views.sayhello,name=sayhello ),
]3)启动服务器,在浏览器中输入如下网址:
http://127.0.0.1:8000
4)由于视图设置了睡眠2秒,导致浏览器过了2秒之后才访问完成。
5)在项目/settings.py中安装。
INSTALLED_APPS=(
.
DJ芹菜,
}6)创建芹菜_任务的包文件,专门存放tasks.py任务脚本
7)在芹菜_任务目录下创建tasks.py文件。
从芹菜进口芹菜
导入时间
# 创建一个芹菜类的实例对象
app=Celery(celery_tasks.tasks ,broker= redis://127。0 .0 .1:6379/8 )
@app.task
def async_sayhello():
打印(你好.)
时间。睡眠(2)
打印(世界.)8)打开assetinfo/views.py文件,修改说你好视图如下:
从芹菜_任务。任务导入async_sayhello
def说你好(请求):
#打印(你好.)
#时间。睡眠(2)
#打印(世界.)
async_sayhello.delay()
返回HttpResponse(hello world)9)执行迁移生成芹菜需要的数据表。
python3 manage.py迁移生成表如下:
10)启动Redis,如果已经启动则不需要启动。
[root @ server 01 ~]# PS-ef grep redis
root 3694 3462 0 00:41 pts/4 00:00:00 grep-color=auto redis
根31054 1 0月27日?01:12:52 ./redis-server 127.0.0.1:6379
[root@server01 ~]# redis-cli
127.0.0.1:6379 11)启动工人。
芹菜-芹菜_任务。任务工作程序-日志级别=信息
12 )再次访问网址,芹菜执行报错。
http://127.0.0.1:8000
查看报错如下:
[2019-08-01 00:16:03,062:错误/主流程]任务处理程序引发了错误:ValueError(没有足够的值来解包(应为3,得到0))
回溯(最近一次呼叫):
文件" g:\ python 3 \ python 371 \ lib \ site-packages \台球\pool.py ",第358行,在工作循环中
result=(True,prepare_result(fun(*args,**kwargs)))
文件g:\ python 3 \ python 371 \ lib \ site-packages \ celery \ app \ trace。py ,第544行,在快速跟踪任务中
任务,接受,主机名=_位置
值错误:没有足够的值来解包(应为3,得到0)经过查阅资料,发现这是高版本芹菜运行在win10存在的问题。
13 ) 解决报错
解决:原网页:无法在Windows操作系统下运行任务
看别人描述大概就是说win10上运行celery4.x就会出现这个问题,解决办法如下,原理未知:
先安装一个小事件
pip3安装事件小程序然后启动工人的时候加一个参数,如下:
芹菜-一个我的模块工人正式执行,如下:
(venv)F:\ python project \ django-练习芹菜-A芹菜_ tasks。任务工人信息事件信函
-芹菜@ USC 2 v2 g2f 9 npb 650v 4。3 .0(大黄)
- **** -
-* * * * * *-Windows-10-10。0 .17763-SP0 2019-08-01 00:22:21
- * - **** -
-* *-[配置]
- ** - .app:芹菜_任务。任务:0x 1 E4 a 24170 f 0
- ** - .运输:redis://127.0.0.1:6379/8
- ** - .结果:已禁用://
- *** - * - .并发:12(小事件)
- ******* - .任务事件:关闭(启用-E以监视该工作线程中的任务)
- ***** -
-[队列]。芹菜交换=芹菜(直接)键=芹菜
[任务]。芹菜_任务。任务。异步_说你好
[2019-08-01 00:22:21629:INFO/main process]连接到redis://127.0.0.1:6379/8
[2019-08-01 00:22:21,700:信息/主流程]混合:搜索邻居
[2019-08-01 00:22:22913:INFO/main process]mingle:独自一人
[2019-08-01 00:22:23,012:信息/主流程]芹菜@ USC 2 v2 F9 npb 650准备好。
[2019-08-01 00:22:23,045: INFO/MainProcess] pidbox:连接到redis://127.0.0.1:再次访问http://127.0.0.1:8000
执行任务成功,如下:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。