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

目录

一、协程的定义:

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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值