Python面试题--第68道题目--什么是协程,协程的两个运行任务的函数怎么使用--2022年04月23日

Python面试题--第68道题目--什么是协程,协程的两个运行任务的函数怎么使用--2022年04月23日,第1张

目录

一、协程的定义:

1、协程(co-routine):

2、协程的优势:

3、协程的劣势:

二、实例代码演示:

1、最简单的协程:

2、两个运行任务的函数:run、create_task


一、协程的定义: 1、协程(co-routine):

又称微线程,是一种多方协同的工作方式。当前执行者在某个时刻主动让出(yield)控制流,并记住自身当前的状态,以便在控制流返回时能从上次让出的位置恢复(resume)执行。简而言之,协程的核心思想就在于执行者对控制流的 “主动让出” 和 “恢复”。相对于,线程此类的 “抢占式调度” 而言,协程是一种 “协作式调度” 方式。

2、协程的优势:
  • 执行效率极高,因为子程序切换(函数)不是线程切换,由程序自身控制,没有切换线程的开销。所以与多线程相比,线程的数量越多,协程性能的优势越明显。
  • 不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在控制共享资源时也不需要加锁,因此执行效率高很多。
3、协程的劣势:

协程可以处理IO密集型程序的效率问题,但是处理CPU密集型不是它的长处,如要充分发挥CPU利用率可以结合多进程+协程。

二、实例代码演示: 1、最简单的协程:
import asyncio

async def main():
    print('hello')
    await asyncio.sleep(2)
    print('world')

asyncio.run(main())  # 运行协程,这样写。
2、两个运行任务的函数:run、create_task
import asyncio
import time

async def say_after(delay1, delay2, what):
    await asyncio.sleep(delay1)
    print(what)
    await asyncio.sleep(delay2)

async def myfun():
    print(f'开始时间:{time.strftime("%X")}')
    await say_after(1,1, 'hello')
    await say_after(2,2, 'world')
    print(f'执行结束:{time.strftime("%X")}')

asyncio.run(myfun())

# create_task  并发运行异步任务多协程的函数

async def myfun1():
    task1 = asyncio.create_task(say_after(1,1,'hello'))
    task2 = asyncio.create_task(say_after(2,2, "world"))
    print(f"开始时间:{time.strftime('%X')}")
    await task1
    await task2
    print(f'执行结束:{time.strftime("%X")}')

asyncio.run(myfun1())

协程,又称微线程,使用async修饰要运行的函数,在运行协程函数时,需要使用await。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/788959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存