初识python异步模块Trio

本文介绍了Python异步编程库Trio,它比asyncio更易用且功能强大,目前仍处于试验阶段。文章详细讲解了如何使用Trio运行第一个异步函数,异步等待、多个异步函数的并发执行以及Trio中的任务调度和跟踪器的工作原理。通过实例解析了异步函数的使用,包括使用trio.run调用、await关键字的必要性以及通过nursery管理多个任务。文章适合对Python异步编程感兴趣的读者。
摘要由CSDN通过智能技术生成

Trio翻译过来是三重奏的意思,它提供了更方便异步编程,是asyncio的更高级的封装。
它试图简化复杂的asyncio模块。使用起来比asyncio和Twisted要简单的同时,拥有其同样强大功能。这个项目还很年轻,还处于试验阶段但是整体设计是可靠的。作者鼓励大家去尝试使用,如果遇到问题可以在git上对他提issue。同时作者还提供了一个在线聊天室更方便与其沟通:https://gitter.im/python-trio/general

准备工作

  • 确保你的python版本在3.5以及以上。
  • 安装trio。python3 -m pip install --upgrade trio
  • import trio 运行是否有错误,没有错误可以往下进行了。

    知识准备Async方法

    使用trio也就意味着你需要一直写异步方法。
# 一个标准方法
def regular_double(x):
    return 2 * x

# 一个异步方法
async def async_double(x):
    return 2 * x

从外观上看异步方法和标准方法没什么区别只是前面多了个async。
“Async” 是“asynchronous”的简写,为了区别于异步函数,我们称标准函数为同步函数,
从用户角度异步函数和同步函数有以下区别:

  1. 要调用异步函数,必须使用await关键字。 因此,不要写regular_double(3),而是写await async_double(3).
  2. 不能在同步函数里使用await,否则会出错。
    句法错误:
def print_double(x):
    print(await async_double(x))   # <-- SyntaxError here

但是在异步函数中,await是允许的:

async def print_double(x):
    print(await async_double(x))   # <-- OK!

综上所述:作为一个用户,异步函数相对于常规函数的全部优势在于异步函数具有超能力:它们可以调用其他异步函数。
在异步函数中可以调用其他异步函数,但是凡事有始有终,第一个异步函数如何调用呢?
我们继续往下看

为何调用第一个异步函数

import trio

async def async_double(x):
    return 2 * x

trio.run(async_double, 3)  # returns 6

这里我们可以使用trio.run来调用第一个异步函数。
接下来让我们看看trio的其他功能

异步中的等待

import trio

async def double_sleep(x):
    await trio.sleep(2 * x)

trio.run(double_sleep, 3)  # does nothing for 6 seconds then returns

这里使用了异步等待函数 trio.sleep,它的功能和同步函数中的time.sleep()差不多,但是因为需要使用await调用,所以由前面的结论我们知道这是一个异步函数用的等待方法。
事实这个例子没有实际用处,我们用同步函数就可以实现这个简单的功能。这里主要是为了演示异步函数中通过await可以调用其他的异步函数。
异步函数调用的典型结构

trio.run -> [async function] -> ... -> [async function] -> trio.whatever

不要忘了写await

如果忘了写await会发生什么,我们看下面的这个例子

import time
import trio

async def broken_double_sleep(x):
    print("*yawn* Going to slee
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值