当前位置: 首页 > news >正文

网站建设招标书范本用flask做的网站有哪些

网站建设招标书范本,用flask做的网站有哪些,深夜一个人适合看的电影,网站首页制作采用一、概念 对于每一个由协程构建器开启的协程#xff0c;都会返回一个 Job 实例用来管理协程的生命周期。launch()直接返回 Job实现#xff0c;async() 返回的 Deferred 实现了 Job接口。 Job public fun start(): Boolean public fun cancel(cause: CancellationException? …一、概念 对于每一个由协程构建器开启的协程都会返回一个 Job 实例用来管理协程的生命周期。launch()直接返回 Job实现async() 返回的 Deferred 实现了 Job接口。 Job public fun start(): Boolean public fun cancel(cause: CancellationException? null) 取消 Job 会抛异常默认可空也可以自定义job.cancel(CancellationException(取消))。它不会立马就被取消先进入 cancelling。协程作用域和协程上下文的扩展函数cancel()底层都是调用的它。 public suspend fun join() 挂起当前协程直到 Job 完成。 public suspend fun Job.cancelAndJoin() 挂起当前协程直到 Job 取消完成。 public fun invokeOnCompletion(handler: CompletionHandler): DisposableHandle Job结束后调用该回调不管是cancelled还是competed都会回调。 Deferred public suspend fun await(): T 挂起当前协程直到 Deferred 完成。 Await.kt joinAll( ) public suspend fun joinAll(vararg jobs: Job): Unit jobs.forEach { it.join() } 挂起当前协程直到传入的 Job 都执行完。 public suspend fun CollectionJob.joinAll(): Unit forEach { it.join() } 挂起当前协程直到集合中的 Job 都执行完。 awaitAll( ) public suspend fun T awaitAll(vararg deferreds: DeferredT): ListT 挂起当前协程直到传入的 Deferred 都执行完。 public suspend fun T CollectionDeferredT.awaitAll(): ListT 挂起当前协程直到集合中的 Deferred  都执行完。 二、生命周期 如果Job是通过协程构建器创建的Active就是协程主体运行时的状态在这个状态下我们可以启动子协程。一般协程都是在Active状态下启动只有那些延迟启动的才会以New状态启动。         当Job完成时会进入Completing状态等待所有子协程完成然后进入Compelted状态。         如果Job在Active或Completing状态下取消或者异常会进入到Cancelling状态供我们做一些资源释放等工作然后进入到Cancelled状态。 没有直接的生命周期函数可供调用而是使用以下三个属性去做判断 Job的状态/函数判断isActiveisCompletedisCancelledNew 新创建optional initial statefalsefalsefalseActive 活跃default initial statetruefalsefalseCompleting 完成中transient statetruefalsefalseCancelling 取消中transient statefalsefalsetrueCancelled 已取消final statefalsetruetrueCompeleted 已完成final statefalsetruefalse 三、协程的取消 Java 线程其实没有提供任何机制来安全地终止线程Thread 类提供了一个 interrupt() 方法用于中断线程的执行并不意味着立即停止目标线程正在进行的工作而只是传递了请求中断的消息然后由线程在下一个合适的时机中断自己。         仅仅终止线程是一个糟糕的方案协程提供了一个 cancel() 函数来取消Job但并不是一定能取消。协程的取消是协作的一段协程代码必须协作才能被取消。所有 kotlinx.coroutines 中的挂起函数都是可被取消的它们检查协程的取消并在取消时抛出 CancellationException。如果协程正在执行计算任务并且没有检查取消的话那么它是不能被取消的。 3.1 取消的原理 public interface Job : CoroutineContext.Element {//通过序列保存了所有子Job的引用所以具有父子层级结构public val children: SequenceJob }//子Job接口 public interface ChildJob : Job {//提供了父Job取消自己的函数public fun parentCancelled(parentJob: ParentJob) }//父Job接口 public interface ParentJob : Job {//提供了获取子Job被取消原因的函数public fun getChildJobCancellationCause(): CancellationException }//Job的实现类同时实现了ChildJob和ParentJob说明一个Job对象既可以是父Job也可以是子Job public open class JobSupport constructor(active: Boolean) : Job, ChildJob, ParentJob, SelectClause0 {internal var parentHandle: ChildHandle? //当前协程的父协程帮助类当前协程作为子协程 }3.2 取消的状态 挂起函数挂起点会在执行的时候检查协程的状态其它情况需要手动调用 job.isAlive 或 job.ensureActive() 来检查。 运行出错或者调用cancel()后该Job会在遇到第一个挂起点开始取消并抛出CancellationException异常 先处于Cancelling状态没有挂起点或检查措施便不会响应取消操作直至代码块执行完毕。才能继续执行其它否则会存在其它协程并发执行。手动调用join()或遇到代码中的第一个挂起点协程才会真正被取消再处于Cancelled状态。推荐使用cancelAndJoin()简化调用。一旦该Job被取消该Job下的子job也会一并取消但父Job和兄弟Job不受影响该Job不能再用作任何新Job的父Job不能开启新协程。 3.3 取消的异常处理 协程通过抛出一个 CancellationException异常 来取消 Job。cancel() 可以传参使用不同的异常来指定原因需要是 CancellationException 的子类才能取消协程。该异常不会导致父协程或兄弟协程的取消可以使用 try-catch-finally 去捕获处理释放资源推荐使用标准函数 use() 会自动关闭资源。 suspend fun main() runBlocking {//没有继承父协程的上下文有自己的作用域因此 runBlocking 不会等待 GlobalScope 执行完再结束。val job GlobalScope.launch {try {//耗时操作}catch (e:Exception){//处理异常}finally{//释放资源}}delay(1000) //让job运行一下再取消 // job.cancel() //抛异常 JobCancellationException // job.join() //挂起函数这样就会等 GlobalScope 取消完再继续执行job.cancelAndJoin() //简写 } 3.4 无法直接取消的情况CPU密集型、没有挂起点 由于调用cancel()操作后Job会处于Cancelling状态此时只需判断Job是否处于活跃状态于便可以响应cancel()操作。 CPU密集型任务无法直接被cancel()取消因为直接取消会丢失临时计算数据。可以通过对Job状态的判断来响应cancel()操作。Job的取消发生在挂起点上没有挂起点便不会响应cancel()操作当我们使用协程却没有调用任何挂起函数的时候做阻塞操作、神经网络学习便会发生这种情况。 isActive 加在判断里 public val CoroutineScope.isActive: Boolean     get() coroutineContext[Job]?.isActive ?: true 判断Job是否处于活跃状态尚未完成且尚未取消。 ensureActive() 写在函数里 public fun CoroutineScope.ensureActive(): Unit coroutineContext.ensureActive() 返回coroutineContext扩展函数调用Job的函数最终调用的是 !isActiveJob处于非活跃状态就报错CancelllationException。 yield() 不至于抢占太多线程让其它协程拿不到执行权 public suspend fun yield(): Unit 会检查所在协程的状态如果已经取消则报错 CancellationException此外会尝试让出线程执行权。 suspend fun main() runBlocking {val job launch(Dispatchers.Default) { //该协程中无挂起点while (isActive) { //判断出false便会取消ensureActive() //检测出false便会取消yield() //不至于因为任务太抢占资源导致其它协程拿不到线程执行权println(CPU密集任务)}}delay(1000) //让job运行一会儿后再取消println(等完)job.cancelAndJoin() //cancel()操作会将 isActive falseprintln(结束) } 3.5 一定无法取消的情况 由于我们可以捕获CancellationException异常在 Job 真正结束前可以做一些事情由于 Job 响应 cancel() 后已经处于 Cancelling状态此时启动一个新协程会被忽略或者调用挂起函数会抛异常CancellationException是无法被执行的。 方式①指定协程上下文为NonCancellable来得到一个常驻Job不响应 cancel()操作。方式②使用invokeOnCompletion()函数当 Job 处于Cancelled状态或Compeleted状态时会执行回调。形参it是一个异常没有异常值为null协程被取消值为 CancellationException。 withContext(NonCancellable){ //不会响应取消 } job.invodeOnCompletion{//回调代码 } 3.6 自定义挂起函数定义取消的回调 详见回调函数改挂起函数 //定义 suspend fun getResource():StudentBean suspendCancellableCoroutine{ continuation -request(object : ICallBack{override fun onSuccess(data:String){continuation.resume(data)}override fun onFailure(exception:Throwable){continuation.resumeWithException(exception)} }) //定义协程取消时应该做的操作continuation.invokeOnCancellation{ //TODO... } }//使用 suspend main() runBlocking{try{viewModelScope.launch{val bean getResource()}}catch(e : Exception){e.printStackTrace()} } 四、自定义Job 协程构建器基于其父Job构建自己的Job如果自定义了Job便不再适用父子关系失去了结构化并发父协程不会等待子协程完成。 fun main(): Unit runBlocking {val scope CoroutineScope(Job()) // test1(scope) //打印测试1---子协程1test2(scope) //打印测试2---子协程1 、测试2---子协程2delay(1000) }fun test1(scope: CoroutineScope) {scope.launch {launch {println(测试1---子协程1)scope.cancel()}launch {println(测试1---子协程2)}} }fun test2(scope: CoroutineScope) {scope.launch {launch(Job()) { //此处添加了一个job参数println(测试2---子协程1)scope.cancel()}launch {println(测试2---子协程2)}} }
http://www.pierceye.com/news/792066/

相关文章:

  • 福田网站建设龙岗网站建设ie的常用网站
  • 网站推广途径和推广要点地产网站方案
  • 用asp做的网站2021互联网公司100强
  • 网站运营无经验可以做吗垂直类网站怎么做
  • 中国站长网站wordpress开启xmlrpc
  • 网站建设的好处建设工程质量管理条例网站
  • asp.net网站建设教程做电影网站 需要进那些群
  • 2013网站挂马教程长沙网站建设优化
  • 网站搭建详细教程wordpress 找不到主题
  • 陕西省建设厅申报网站大型网站建设公司推荐
  • 企业商城建站外贸建站上海
  • 织梦如何做网站网页设计公司背景
  • 购买域名网站程序员外包公司到底值不值得去
  • 网站出售商品建设广告公司主要做什么
  • 西安的电商网站设计大庆市城乡建设局网站
  • 服装网站建设需要什么内容中国建设银行总行官方网站
  • 免费下载设计素材网站wordpress metaslider
  • 如何建一个自己的网站给网站做rss
  • 宜昌网站制作公司亿腾云优化seo
  • 网站icp备案信息是什么一号网站建设
  • 怎么样做网站徐州市中宇建设工程有限公司网站
  • 网站建站公司官网免费企业网站建设介绍
  • 知名网站建设托管河北建筑工程学院招生信息网
  • 服务器网站建设流程图十堰网站制作公司电话
  • 营销型网站seo开发一个app需要什么技能
  • 网站的欢迎页怎么做织梦网站名称修改
  • 树莓派做博客网站济南抖音推广公司
  • 网站短链接生成济宁网络
  • 组建 网站开发团队交互设计作品集网站
  • 宜春个人网站建设网站建设惠州