首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Kotlin 协程】协程启动 ⑤ ( 协程作用域构建器 | runBlocking 函数 | coroutineScope 函数 | supervisorScope 函数 )

文章目录 一、结构化并发 二、协程作用域构建器 ( runBlocking 函数 | coroutineScope 函数 ) 二、协程作用域构建器 ( coroutineScope 函数 | supervisorScope...; 二、协程作用域构建器 ( runBlocking 函数 | coroutineScope 函数 ) ---- 结构化并发 通过 协程作用域 CoroutineScope 管理协程任务 ; 协程作用域...runBlocking 可以在普通的函数中执行 , 将主线程包装成了协程体 ; 但是 coroutineScope 函数 由于是 挂起函数 , 只能在 协程体 中使用 ; 该 coroutineScope...( coroutineScope 函数 | supervisorScope 函数 ) ---- 1、协程作用域构建器概念 coroutineScope 函数 构建的 协程作用域 , 如果有一个 子协程....() -> R): R supervisorScope 函数 构建的 协程作用域 , 如果有一个 子协程 执行失败 , 其它子协程继续执行 , 不会受到执行失败的子协程影响 ; 函数原型如下 : public

53930

python 协程

协程也是单线程的,没法利用cpu的多核,想利用cpu多核可以通过,进程+协程的方式,又或者进程+线程+协程。...1、协程的简单实现 协程的原理是通过生成器实现,如下:程序执行到19行,执行consumer函数到13行,next生成器,执行producer函数到8行停下,返回consumer函数13行继续往下执行,...gevent是对gevent的再次封装,能自动识别耗时操作切换到其它协程。注意gevent遇到耗时操作才会切换协程运行,没有遇到耗时操作是不会主动切换的。...gevent.spawn(*args, **kwargs)    不定长参数中的第一个参数为协程执行的方法fn,其余的依次为 fn 的参数。开启了协程后要调用join方法。...joinall() 方法传参一个列表,列表包含了所有的协程。

39220
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python协程

    python协程入门 函数的执行顺序 在了解协程之前, 我们需要再次回想一下python中的多个函数执行的顺序是怎样的?...协程间的数据传输 协程是单个函数(一个线程),可以随时中断执行,也就意味着,在中断过程中,可以做一些有意义的事情(它并不像普通函数间的调用,一个函数在执行后是没办法继续去操作该函数的,如传递新的数据,修改函数内部的变量等...由于协程是 函数及 生成器的综合体,so,它拥有了两者的共同特性 可以携带参数 可以有返回值 可以使用for循环调用 可以使用send方法 看这个列子,注意理解协程函数是通过什么样的方式在执行过程中传递外部数据的.../usr/bin/python #-*-coding:utf-8-*- '''协程实现生产者与消费者模型''' def product(c): '''生产者:厨师生产包子 - 生产者接收消费者发来的消息...: yield关键字 协程实际上是 : 生成器函数 使用g.send(None)触发协程 g.send("a") 像xie程内部发送数据 g.close()关闭协程

    59510

    【Kotlin 协程】协程异常处理 ② ( SupervisorJob 协程 | supervisorScope 协程作用域构建器函数 )

    文章目录 一、SupervisorJob 协程 二、supervisorScope 协程作用域构建器函数 在上一篇博客介绍了 协程异常处理 【Kotlin 协程】协程异常处理 ① ( 根协程异常处理..., 会将异常 传递给 父协程 , 父协程会执行如下操作 : ① 取消子协程 : 不仅仅取消产生异常的子协程 , 该父协程下所有的子协程都会取消 ; ② 取消父协程 : 将父协程本身取消 ; ③ 向父协程的父协程传播异常...; SupervisorJob 协程实现 : 创建 SupervisorJob 协程 , 需要先 创建一个 协程作用域 , 在 CoroutineScope 构造函数 中 传入 SupervisorJob...协程作用域 调用 launch 构建器函数 , 即可 创建 SupervisorJob 协程 , 这些协程可以自己处理异常 , 不会向父协程传递异常 ; 代码示例 : // 先创建 Supervisor...协程作用域构建器函数 ---- 使用 supervisorScope 作用域构建器函数 , 可以直接创建一个 SupervisorScope 协程作用域 , 在该作用域中定义的 协程 , 都是 SupervisorJob

    77210

    协程及Python中的协程

    1 协程 1.1协程的概念 协程,又称微线程,纤程。英文名Coroutine。一句话说明什么是线程:协程是一种用户态的轻量级线程。...我们把一个线程中的一个个函数叫做子程序,那么子程序在执行过程中可以中断去执行别的子程序;别的子程序也可以中断回来继续执行之前的子程序,这就是协程。...(2)进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序 2 Python中如何实现协程 2.1 yield实现协程   前文所述“子程序(函数)在执行过程中可以中断去执行别的子程序;别的子程序也可以中断回来继续执行之前的子程序...2.2 greenlet实现协程   Python的 greenlet就相当于手动切换,去执行别的子程序,在“别的子程序”中又主动切换回来。。。 greenlet协程例子: 1 #!...实现协程程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。

    1.3K20

    Python 协程

    协程 参考资料 http://python.jobbole.com/86481/ http://python.jobbole.com/87310/ http://segmentfault.com/a/1190000009781688...历史历程 3.4引入协程,用yield实现 3.5引入协程语法 实现的协程比较好的包有asyncio,tornado,gevent 定义:协程 是为非抢占式多任务产生子程序的计算机程序组件,协程允许不同入口点在不用位置暂停或者执行程序...从技术角度讲,协程就是一个你可以暂停执行的函数,或者干脆把协程理解成生成器 协程的实现: yield返回 send调用 协程的四个状态 inspect.getgeneratorstate(...)...next预激(prime) 代码案例v2 协程终止 协程中未处理的异常会向上冒泡,传给 next 函数或 send 方法的调用方(即触发协程的对象) 终止协程的一种方式:发送某个哨符值,让协程退出。...yield from 调用协程为了得到返回值,协程必须正常终止 生成器正常终止会发出StopIteration异常,异常对象的vlaue属性保存返回值 yield from从内部捕获StopIterator

    1.5K127

    Python协程

    协程是啥 协程是 python 中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。为啥说它是一个执行单元,因为它自带 CPU 上下文。...这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。只要这个过程中保存或恢复 CPU 上下文那么程序还是可以运行的。...协程和线程差异 在实现多任务时,线程切换从系统层面远不止保存和恢复 CPU上下文这么简单。...greenlet模块 为了更好使用协程来完成多任务,python 中的 greenlet 模块对其封装,从而使得切换任务变的更加简单 使用如下命令安装 greenlet 模块: pip install...gevent模块 greenlet 已经实现了协程,但是这个还的人工切换,是不是觉得太麻烦了,不要着急,python还有一个比greenlet更强大的并且能够 自动切换任务 的模块 gevent 其原理是当一个

    40720

    Python 协程

    无私函数(协程)通过yield来调用其它无私函数(协程)。通过yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称、平等的。...send 从上面的程序中可以看到,目前只有数据从 fib() 中通过 yield 流向外面的 for 循环;如果可以向 fib() 发送数据,那不是就可以在 Python 中实现协程了嘛。...于是,Python 中的生成器有了 send 函数,yield 表达式也拥有了返回值。...grep Python 实现的 grep 也是一个很好的协程的例子 def grep(pattern): print("Searching for", pattern) while True...Python3.5 引入 async/await 让协程表面上独立于生成器而存在,让 Python 写协程更加方便。 学习完成后会更新博客,敬请期待。

    27610

    ​Python协程

    协程是啥 协程是 python 中另外一种实现多任务的方式,只不过比线程更小占用更小执行单元(理解为需要的资源)。 为啥说它是一个执行单元,因为它自带 CPU 上下文。...这样只要在合适的时机, 我们可以把一个协程 切换到另一个协程。 只要这个过程中保存或恢复 CPU 上下文那么程序还是可以运行的。...但是 协程的切换只是单纯的操作 CPU 的上下文,所以一秒钟切换个上百万次系统都抗的住。...greenlet模块 为了更好使用协程来完成多任务,python 中的 greenlet 模块对其封装,从而使得切换任务变的更加简单 使用如下命令安装 greenlet 模块: pip install...gevent模块 greenlet 已经实现了协程,但是这个还的人工切换,是不是觉得太麻烦了,不要着急,python还有一个比greenlet更强大的并且能够 自动切换任务 的模块 gevent 其原理是当一个

    55900

    【Kotlin 协程】协程启动 ③ ( 协程组合并发 | 挂起函数串行执行 | 协程组合并发执行挂起函数 )

    文章目录 一、挂起函数串行执行 二、协程组合并发执行挂起函数 一、挂起函数串行执行 ---- 在协程体中 , 连续使用多个挂起函数 , 这些函数的执行是顺序执行的 , 挂起函数 1 执行完毕后 , 才执行..., 可以将 主线程 包装成 协程 // measureTimeMillis 函数用于测量内部代码块执行的时间, 单位毫秒 ms val time =...577 ms 二、协程组合并发执行挂起函数 ---- 如果想要两个挂起函数并发执行 , 并且同时需要两个函数的返回值 , 则使用 async 协程构建器 , 启动两个协程 , 在协程体中执行两个并发函数..., 可以将 主线程 包装成 协程 // measureTimeMillis 函数用于测量内部代码块执行的时间, 单位毫秒 ms val time =...} suspend fun hello2(): Int { delay(300) return 2 } } 执行结果 : 启动两个 async 协程

    70420

    Python协程

    这是通过栈实现的,一个函数就是一个执行的子程序,子程序的调用总是有一个入口、一次返回,调用的顺序是明确的 协程 又称微线程(纤程),是一种用户态的轻量级线程 理解协程 普通理解:线程是系统级别的,它们是由操作系统调度...协程是程序级别,由程序员根据需求自己调度。我们把一个线程中的一个个函数称为子程序,那么一个子程序在执行的过程中可以中断去执行别的子程序,这就是协程。...因此,协程能后保留一次调用的状态,每次过程重入时,就相当于进入上一次调用的状态 优点 a、无需线程上下文切换的开销,协程避免了无意义的调度,从而提高了性能,但是程序员必须自己承担调度的任务,同时协程也失去了标准线程使用多...CPU的能力 b、无需原子操作锁定及同步的开销 c、方便切换控制流,简化编程模型 d、高并发+高可扩展+低成本:一个CPU支持上万个协程不是问题 缺点 a、无法利用多核CPU,协程的本质是单个线程,它不能同时将多个...CPU的多个核心使用上,协程需要和进程匹配使用才能运行在多个CPU上。

    27540

    Python 协程

    Python 协程 协程(Coroutine)又称微线程,即轻量级的线程。协程可以理解成与调用方协作,产出由调用方提供的值的过程。与线程相比,其优势在于上下文切换的成本更低,且由用户自己控制。...发展史 Python 中的协程主要经历了三个阶段。...yield / send 协程的运行 在生成器中使用 yield 关键字,而后生成器的调用方使用 .send(value) 方法发送数据,该数据 value 就会成为生成器函数中 yield 表达式的值...async / await 从 python3.5 开始,Python 新加了一种协程定义方法 asyncdef。...简单的讲,async 定义一个协程,await 用于挂起阻塞的异步调用接口;而协程的调用方法在 Python3.7 中做了些许改动,所以这一节以 Python 版本分成两部分来讲解。

    61420

    python协程与golang协程的区

    协程和线程的关系 协程是在语言层面实现对线程的调度,避免了内核级别的上下文消耗。 python协程与调度 Python的协程源于yield指令。...和大多数语言一样,在 Python 中,协程的调度是非抢占式的,也就是说一个协程必须主动让出执行机会,其他协程才有机会运行。 让出执行的关键字就是 await。...函数激发协程,挂起,等待服务端处理完成返回后再调用CallBack函数继续下面的流程 Go的协程 Go天生在语言层面支持,和Python类似都是采用了关键字,而Go语言使用了go这个关键字,可能是想表明协程是...goroutine 是一种 比线程更加轻盈、更省资源的协程。 Go 语言通过系统的线程来多路派遣这些函数的执行,使得 每个用 go 关键字执行的函数可以运行成为一个单位协程。...Python 整个异步编程生态的问题,之前标准库和各种第三方库的阻塞性函数都不能用了,如:requests,redis.py,open 函数等。

    1.5K20
    领券