Python实现协程的几种方法!这个非常有用!

大哥,哪位知道,Python实现协程的几种方法!这个非常有用!
最新回答
寂月灭影

2026-10-21 07:57:10

Python中实现协程的几种方法如下:

  • greenlet模块:这是一个第三方模块,通过greenlet实现协程。需要先安装模块,然后导入并使用greenlet类创建协程对象,通过switch()方法切换执行。
  • yield关键字:使用yield关键字可以实现协程,但这种方式是伪协程,不推荐使用。通过yield可以在函数中暂停执行,并返回一个值,然后可以继续执行。
  • asyncio装饰器:在Python 3.4版本之后,可以使用asyncio模块的@asyncio.coroutine装饰器来定义协程函数。使用yield from来等待其他协程完成。
  • async/await关键字:在Python 3.5版本之后,推荐使用async和await关键字来实现协程。async用于定义协程函数,await用于等待一个协程完成。

以下是各种实现方式的示例代码:

1. 通过greenlet实现协程from greenlet import greenletdef fun1(): print(1) gr2.switch() print(2) gr2.switch()def fun2(): print(3) gr1.switch() print(4)gr1 = greenlet(fun1)gr2 = greenlet(fun2)gr1.switch()2. 通过yield关键字实现协程def fun1(): yield 1 yield from fun2() yield 2def fun2(): yield 3 yield 4f1 = fun1()for item in f1: print(item)3. 通过asyncio模块实现协程import asyncio@asyncio.coroutinedef fun1(): print(1) yield from asyncio.sleep(2) print(2)@asyncio.coroutinedef fun2(): print(3) yield from asyncio.sleep(2) print(4)tasks = [ asyncio.ensure_future(fun1()), asyncio.ensure_future(fun2())]loop = asyncio.get_event_loop()loop.run_until_complete(asyncio.wait(tasks))4. 通过async/await关键字实现协程import asyncioasync def fun1(): print(1) await asyncio.sleep(2) print(2)async def fun2(): print(3) await asyncio.sleep(2) print(4)tasks = [ asyncio.ensure_future(fun1()), asyncio.ensure_future(fun2())]loop = asyncio.get_event_loop()loop.run_until_complete(asyncio.wait(tasks))

以上是Python中实现协程的几种方法,每种方法都有其特点和适用场景。在实际开发中,推荐使用async/await关键字来实现协程,因为它是Python官方推荐的方式,并且语法更加简洁明了。