Coroutines In Python

本文探讨了Python中Coroutine的概念及其与Generator的关系。通过对比抢占式与协作式调度方式,解释了Coroutine在程序中的作用及其实现方式。此外,文中还详细介绍了yield表达式如何用于定义Generator函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习Python中yield时顺带了解了一下Coroutines.

 

在多任务系统中,可以采取两种调度方式:抢占式preemptive和协作式cooperative,在java里,我们对前一种应该比较熟悉,jdk里面的多线程编程都是采取的这种方式。Java现在还不能在语言层面支持后一种方式。可以使用一些开源库来实现coroutines,比如Kilim,参考文章:

http://www.ibm.com/developerworks/cn/java/j-javadev2-7.html

 

 

wiki对coroutines的定义为:

In computer science, coroutines are program components that generalize subroutines to allow multiple entry points for suspending and resuming execution at certain locations. Coroutines are well-suited for implementing more familiar program components such as cooperative tasks, iterators, inifnite lists and pipes.

 

yield表达式主要用来定义一个generator函数,并且只能用在函数体内。

asyncio是Python中的一个内置模块,用于编写异步代码。它提供了一种基于协程的方式来处理并发任务,得编写高效的异步程序变得更加简单和直观。 在使用asyncio时,我们可以定义协程函数(coroutine function),这些函数使用`async def`关键字进行定义,并且可以在函数内部使用`await`关键字来挂起当前协程的执行,等待其他协程完成。 下面是一些关于asyncio的重要概念和特性: 1. 事件循环(Event Loop):asyncio通过事件循环来驱动协程的执行。事件循环负责调度和执行协程,并且可以处理IO操作、定时器等事件。 2. 协程(Coroutines):协程是一种轻量级的并发原语,可以看作是可以暂停和恢复执行的函数。使用`async def`定义的函数可以被视为协程函数。 3. 异步函数(Async Functions):异步函数是指使用`async def`定义的函数,它可以包含`await`关键字来挂起当前协程的执行,等待其他协程完成。 4. Future对象:Future对象表示一个异步操作的结果。我们可以使用`asyncio.ensure_future()`或`asyncio.create_task()`来创建Future对象。 5. 回调(Callbacks):在异步编程中,我们可以使用回调函数来处理异步操作完成后的结果。asyncio提供了一些方法来注册回调函数,例如`add_done_callback()`。 6. 并发性(Concurrency):asyncio通过协程的方式实现并发性,可以同时执行多个协程,而不需要使用多线程或多进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值