django-celery-results,Django3.0

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: