首页 > 编程语言 >Python的异步

Python的异步

时间:2023-06-25 10:22:53浏览次数:36  
标签:INFO 异步 run Python test 执行 id asyncio

Simple Demo

错误示范

code:

import asyncio
async def test(id):
    print(id,"开始执行")
    await asyncio.sleep(5)
    print(id,"执行结束")


asyncio.run(test(1))
asyncio.run(test(2))

output:

1 开始执行
1 执行结束
2 开始执行
2 执行结束

这样是不支持异步的,原因两句asyncio.run本身为顺序结构,自然是执行完asyncio.run(test(1))之后才会执行asyncio.run(test(2))。

正确示范

异步需要使用异步的方法。
code:

import asyncio
async def test(id):
    print(id,"开始执行")
    await asyncio.sleep(5)
    print(id,"执行结束")

tasks = [test(1),test(2),test(3)]
asyncio.run(asyncio.wait(tasks))

output:

1 开始执行
2 开始执行
3 开始执行
1 执行结束
2 执行结束
3 执行结束

FastAPI

code:

from fastapi import FastAPI
import asyncio
app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

@app.post("/test")
async def test(data: dict):
    print(data['id'],"开始执行")
    await asyncio.sleep(5)
    print(data['id'],"执行结束")
    return {"status":"True"}

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="127.0.0.1", port=8888)

快速发送id不同的三条请求。
output:

INFO: Started server process [17248]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:8888 (Press CTRL+C to quit)
1 开始执行
2 开始执行
3 开始执行
1 执行结束
INFO: 127.0.0.1:12861 - "POST /test HTTP/1.1" 200 OK
2 执行结束
INFO: 127.0.0.1:12862 - "POST /test HTTP/1.1" 200 OK
3 执行结束
INFO: 127.0.0.1:12864 - "POST /test HTTP/1.1" 200 OK

作为服务此时它也是支持异步的。

标签:INFO,异步,run,Python,test,执行,id,asyncio
From: https://www.cnblogs.com/thx2199/p/17502276.html

相关文章

  • Python3 configparser读取含有中文配置config.ini(Windows)显示乱码的解决方法
    最近在配置文件config.ini有中文输出时,python3打印出来显示乱码。初步判断是由于编码问题。在Python3中虽有encoding参数,但是对于有BOM(如Windows下用记事本指定为utf-8)的文件,需要使用utf-8-sig,使用utf-8没办法。配置文件config.ini如下:[TABLEDATA]project_name......
  • 笔记本输入python无提示、也无报错(不提示“不是内部或外部命令,也不是可运行的程序”)
    最近在安装Python的时候发生了很奇怪的现象(安装前):从命令行执行python并不会输出python版本信息,似乎也没有其他反应,也无报错(不提示“不是内部或外部命令,也不是可运行的程序”),再次输入命令wherepython显示C:\Users\quxw\AppData\Local\Microsoft\WindowsApps\python.exe,如下......
  • C#异步方法中Task.WhenAll的使用
    一、说明Task.WhenAll()、Task.WhenAny()这两个与Task.WaitALL()、Task.WaitAny()是有区别的,When是异步的,Wait是同步的。Task.WhenAll():所有task完成时,task才完成,用于等待多个任务执行结束。Task.WhenAny():任何一个task完成时,task完成。二、示例:usingSystem;usingSystem.IO......
  • requests Python中最好用的网络请求工具 基础速记+最佳实践
    简介requests模块是写python脚本使用频率最高的模块之一。很多人写python第一个使用的模块就是requests,因为它可以做网络爬虫。不仅写爬虫方便,在日常的开发中更是少不了requests的使用。如调用后端接口,上传文件,查询数据库等。本篇详细介绍requests的使用。requests是⽤Python......
  • python篇-kivy-kv
    1,Label  遗留问题:加上 markup:True之后,文本不显示了  解决方法:把text_size和color属性注释掉就出现了kivytest.py#coding:utf-8fromkivy.appimportAppfromkivy.uix.floatlayoutimportFloatLayoutfromkivy.uix.labelimportLabelclassKvTest(FloatLa......
  • Python装饰器
    简单装饰器1.装饰器的本质就是一个函数,在不改变原函数功能的情况下,动态为函数增加功能definfo(func):--本质就是一个函数print(f'调用函数->{func.__name__}')returnfunc......
  • 二分图最优匹配——Python实现
    二分图是一种特殊的图结构,它在经济与管理中具有重要的作用,譬如二分图在市场与供应链管理中发挥着关键作用,在供应链中二分图可以用来描述供应商与分销商之间的关系,帮助确定最佳的供应商-分销商匹配方案。通过建立供应商与分销商之间的连接,可以降低成本、提高效率,并确保产品能够及时......
  • 在PyInstaller中打包Python代码
    在PyInstaller中打包Python代码在实际开发中,我们经常需要将Python代码打包成可独立运行的可执行文件,以便更方便地分享和部署。PyInstaller是一个常用的Python打包工具,可以将Python脚本打包成单个可执行文件。以下是如何使用PyInstaller打包Python代码的步骤:安装PyInstaller,使用......
  • python中dict.copy()用法
    浅拷贝和深拷贝浅拷贝:只会对最表层的进行拷贝,也就是相当于二者共有深拷贝:会申请一块新的内存进行存储,相当于自己独占对于dict的copy来说,是对最表层的键值对进行了深拷贝,举例来说:a={'one':1,'two':2,'three':[1,2,3]}b=a.copy()b从a拷贝过来的是{'one':1,'two':......
  • 6-18|Python画字母H
    在使用Python画字母H时,最基本的步骤就是先定义开始和结束的位置。下面是示例代码:importturtlet=turtle.Turtle()t.penup()t.goto(-50,0)t.pendown()t.goto(50,0)t.penup()t.goto(0,0)t.pendown()t.goto(0,100)turtle.done()上述代码创建了一个名为t的turtle......