当前位置:主页 > 网站制作 > Python技术 >

Python的协程

  Python的协程包含:

  1. 协程创建:

  - 使用asyncio.coroutine装饰器将函数打上coroutine标记

  - 被装饰的函数会变为一个协程对象,可以将其挂起和恢复执行

  - 语法:

python
import asyncio

@asyncio.coroutine 
def func():
    print('Hello')
    yield from asyncio.sleep(1)
    print('World')

  2. 协程调度:

  - 协程需要在事件循环中执行,才能切换任务

  - 使用asyncio.get_event_loop()获取事件循环

  - 使用yield from可以恢复任务,切换到其他任务

  - 语法:

python
loop = asyncio.get_event_loop()
loop.run_until_complete(func())

  3. 创建任务:

  - 可以将协程对象封装为Task(任务)对象,增加调度实体

  - 语法:

python
from asyncio import Task

task = Task(func())
loop.run_until_complete(task)

  4. Future对象:

  - 协程的调用会返回一个Future对象,代表未来的执行结果

  - 可以为Future对象添加回调,当协程执行完毕后回调会被调用

  - 语法:

python
fut = func()
fut.add_done_callback(callback)

  5. 等待其他协程:

  - 可以使用yield from asyncio.sleep(time)挂起当前协程一段时间

  - 可以使用yield from fut等待另一个Future对象的完成

  - 语法:

python
fut1 = func1()
yield from fut1
fut2 = func2()
yield from asyncio.gather(fut1, fut2)  # 等待多个Future

  示例:

python
import asyncio

@asyncio.coroutine
def func1():
    print('func1 start')
    yield from asyncio.sleep(2)
    print('func1 end')

@asyncio.coroutine 
def func2():
    print('func2 start')
    yield from asyncio.sleep(1)
    print('func2 end')

loop = asyncio.get_event_loop()
tasks = [func1(), func2()]
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

  协程是轻量级线程,可以实现并发编程。要理解协程与线程的区别,选择正确的并发方式解决问题。

  要会使用asyncio模块创建协程、调度执行和等待其他协程。要会给Future对象添加回调,在协程完成后执行。

  协程的理解和运用可以实现并发编程,提高程序效率。要在项目中根据需求选择线程或协程解决问题。

  协程属于比较高级的技术,要深入学习相关知识。asyncio模块的熟练运用是Python高手必备技能,需要长期实践。

Python的协程

  要在代码中养成使用协程的习惯,编写异步、高效的程序。协程编程还需要注意各种问题,实现正确的异步逻辑。

上一篇:Python的线程
下一篇:Python的数组

猜你喜欢

微信公众号