python---协程

协程

  • 协程是单线程,由用户决定何时切换
  • 必须头脑清晰地决策切换时机

协程库

  • async def 定义协程函数
  • await 从当前任务切出
  • asyncio.create_task 创建任务
  • asyncio.gather 收集结果,等待并按给定的顺序返回其结果
  • asyncio.run 事件循环开启

生产者、消费者

import asyncio
import time

async def consumer(queue, id):
    while True:
        val = await queue.get()
        print("{} get: {}".format(id, val))
        await asyncio.sleep(1)

async def producer(queue, id):
    for i in range(3):
        await queue.put(i)
        print("{} put: {}".format(id, i))
        await asyncio.sleep(1)

async def main():
    queue = asyncio.Queue()

    consumer_1 = asyncio.create_task(consumer(queue, 'consumer_1'))
    consumer_2 = asyncio.create_task(consumer(queue, 'consumer_2'))

    producer_1 = asyncio.create_task(producer(queue, 'producer_1'))
    producer_2 = asyncio.create_task(producer(queue, 'producer_2'))

    await asyncio.gather(consumer_1, consumer_2, producer_1, producer_2)

asyncio.run(main())

运行结果:

producer_1 put: 0
producer_2 put: 0
consumer_1 get: 0
consumer_2 get: 0
producer_1 put: 1
producer_2 put: 1
consumer_1 get: 1
consumer_2 get: 1
producer_1 put: 2
producer_2 put: 2
consumer_1 get: 2
consumer_2 get: 2

参考
景霄. 揭秘 python 协程. https://time.geekbang.org/column/article/101855

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值