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

Kubernetes基础架构进行自动化测试了吗?

发布时间:2021-02-18 13:30:18 所属栏目:动态 来源:互联网
导读:然后再执行Celery的异步任务,得到的结果是我想要的。 4、 引申思考以及问题 我的问题是解决了,但是这引起了我对Celery的一些兴趣。 当时,我就考虑到,如果我把正在运行中的Task任务,直接kill掉。那么此时我再去看Task的状态,它会是啥呢? STARTED,正在

然后再执行Celery的异步任务,得到的结果是我想要的。

4、 引申思考以及问题

我的问题是解决了,但是这引起了我对Celery的一些兴趣。

当时,我就考虑到,如果我把正在运行中的Task任务,直接kill掉。那么此时我再去看Task的状态,它会是啥呢?

STARTED,正在执行中的状态。

而此时,Task已经关掉,它不应该是这种状态。为此,我猜测这应该是,Task意外结束,没有改变Task的状态导致的。

但是这样就不太好了,因为只要是程序,那它就一定有意外退出的可能。假设,我的项目需要查看Task的状态,当Task被意外kill掉时,项目中查看Task的状态就不准确了。

5、 引申问题解决思路一

当时我想:既然Task被kill掉之后,还能显示运行中,说明此Task的状态一定是保存在某个地方,我把该Task的数据清空了不就完了。

而Celery的数据存储,只有可能存在三个地方:使用RabbitMQ的消息代理(BROKER),使用Redis的任务结果保存处(BACKEND),以及文件保存(当然这点基本上没可能,Celery没这样用过,我主要是死马当活马医)。

这三个地方,其实只有Redis可能存放Task的状态,按照Celery的机制,也只有它最有可能存放。

但是呢?为了弄清Celery的存储机制,我想试试Celery会把数据存到RabbitMQ中吗?然后,我执行了,以下命令,清空RabbitMQ队列。

 

orker继承AQS的意义:A 禁止线程未开始就被中断;B 同步runWorker方法的处理逻辑

12 拒绝策略

  • AbortPolicy 「丢弃任务并抛出RejectedExecutionException异常」
  • DiscardOldestPolicy 「丢弃队列最前面的任务,然后重新提交被拒绝的任务」
  • DiscardPolicy 「丢弃任务,但是不抛出异常」
  • CallerRunsPolicy

❝A handler for rejected tasks that runs the rejected task directly in the calling thread of the {@code execute} method, unless the executor has been shut down, in which case the task is discarded.❞

如果任务被拒绝了,则由「提交任务的线程」执行此任务

13 ForkJoinPool了解一波

 

9 如果优雅地关闭线程池线程池

  • 的关闭,就要先关闭池中的线程,上文第三点有提,暴力强制性stop线程会导致同步数据的不一致,因此我们要调用interrupt关闭线程
  • 而线程池提供了两个关闭方法,shutdownNow和shuwdown
  • shutdownNow:线程池拒接收新任务,同时立马关闭线程池(执行中的会继续执行完),队列的任务不再执行,返回未执行任务List


(编辑:通化站长网)

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