加入收藏 | 设为首页 | 会员中心 | 我要投稿 通化站长网 (https://www.0435zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

数据安全怎么做

发布时间:2021-02-18 13:31:33 所属栏目:动态 来源:互联网
导读:我执行项目中的Celery异步任务,根据我之前查出来的task id。执行demo查询该Task的状态。 这时候,问题就出来了,根据demo返回的Task状态为PENDING。表示Task还在等待中,尚未执行。 这就不对了,此时的状态应该是STARTED,因为我的Task已经执行好一段时间了

我执行项目中的Celery异步任务,根据我之前查出来的task id。执行demo查询该Task的状态。

这时候,问题就出来了,根据demo返回的Task状态为PENDING。表示Task还在等待中,尚未执行。

这就不对了,此时的状态应该是STARTED,因为我的Task已经执行好一段时间了,它返回的结果不准确。

3、 解决问题

难道我用的字段不正确,然后我就谷歌搜索。发现Celery官网和网上的大多数反馈也是表示Task的状态字段就是state。

那我为什么测出的结果和理论的不同呢?然后,我详细查看Celery的配置,发现了一个参数:CELERY_TRACK_STARTED。

该参数默认是关闭的,表示只要Celery开始执行Task就会追踪该Task。所以,开启该参数后,Task的状态是时刻记在BACKEND中的。

好,我在Celery的配置文件处,加了该参数。

 

做项目时,其中用了Celery这种工具。前段时间,遇到过一些问题,解决后没有进行总结,今天就抽个空把它记录下来。

用过Celery的程序员,都知道它是一种异步执行程序的工具。里面有Worker、Task等概念,这里我就不赘述了。

1、功能需求

在使用Celery的过程中,我需要知道Task的状态。Task就是异步任务,用户没执行一次异步任务,就会新创建一个Task,代表此异步任务。

该Task对象中,包含着许多信息,其中也包括状态。我的项目中,需要根据Task的状态来判断,这次异步任务是否还在执行中。

2、 出现问题

既然,我需要Task的状态,那我就需要查看Task的状态怎么获取啊!我查看了一下Celery的源码!发现在Celery的AsyncResult对象中,有个state字段。如下图所示:

 

PriorityBlockingQueue」

  • public PriorityBlockingQueue(int initialCapacity, Comparator comparator)基于数组,元素具有优先级的「无界阻塞队列」,优先级由Comparator决定
  • PriorityBlockingQueue不会阻塞生产者,却会在没有可消费的任务时,阻塞消费者

「DelayQueue」

  • 支持延时获取元素的「无界阻塞队列」,基于PriorityQueue实现
  • 元素必须实现Delayed接口,指定多久才能从队列中获取该元素。
  • 可用于缓存系统的设计、定时任务调度等场景的使用

「SynchronousQueue」

  • SynchronousQueue是一种无缓冲的等待队列,「添加一个元素必须等待被取走后才能继续添加元素」

「LinkedTransferQueue」

  • 由链表组成的TransferQueue「无界阻塞队列」,相比其他队列多了tryTransfer和transfer函数
  • transfer:当前有消费者正在等待元素,则直接传给消费者,「否则存入队尾,并阻塞等待元素被消费才返回」
  • tryTransfer:试探传入的元素是否能直接传给消费者。如果没消费者等待消费元素,元素加入队尾,返回false

「LinkedBlockingDeque」

  • LinkedBlockingDeque是由链表构建的双向阻塞队列,多了一端可操作入队出队,少了一半的竞争,提高并发性

8 Executors的四种线程池浅析

「newFixedThreadPool」

指定核心线程数,队列是LinkedBlockingQueue无界阻塞队列,永远不可能拒绝任务;适合用在稳定且固定的并发场景,建议线程设置为CPU核数



 

(编辑:通化站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!