Python -- asyncio库

Python 的 asyncio 库入门 async它提供了一个使用and语法 编写异步代码的框架await。它允许你的程序在不暂停其他进程的情况下发出网络请求、访问文件以及执行许多操作。这样,你的程序在等待某些操作完成时可以保持响应。无需安装 asyncio,因为它已默认包含在 Python 3.3 及更高版本中。简而言之,本指南为您介绍了该库的基础知识,并重点介绍了同步和异步编程之间的区别。我知道编写异步代码可能很困难,有时甚至很麻烦,但相信我,一旦您熟悉了它,您就会明白它有多少优势。 阅读详情

前言

  • 3.4版本加入标准库。
    asyncio底层基于selectors实现,看似库,其实就是个框架,包含异步IO、事件循环、协程、任务等内容

问题的引出

def a():
    for x in range(3):
        print(x)

def b():
    for x in 'abc':
        print(x)

a()
b()
# 执行结果
0
1
2
a
b
c

这是一个串行的程序,单线程中根本没有做任何
如何并行?

多线程版本

import threading
import time

def a():
    for x in range(3):
        time.sleep(0.001)
        print(x)

def b():
    for x in 'abc':
        time.sleep(0.001)
        print(x)

t1 = threading.Thread(target=a, name='a')
t2 = threading.Thread(target=b, name='b')
t1.start()
t2.start()

# 执行结果
0
1
a
2
b
c

多进程版本

import multiprocessing
import time

def a():
    for x in range(3):
        time.sleep(0.001)
        print(x)

def b():
    for x in 'abc':
        time.sleep(0.001)
        print(x)

if __name__ == '__main__':
    t1 = multiprocessing.Process(target=a, name='a')
    t2 = multiprocessing.Process(target=b, name='b')
    t1.start()
    t2.start()

# 执行结果
a
b
c
0
1
2

生成器版本

def a():
    for x in range(3):
        print(x)
        yield

def b():
    for x in 'abc':
        print(x)
        yield

x = a()
y = b()
for i in range(3):
    next(x)
    next(y)

# 执行结果
0
a
1
b
2
c

上例在一个线程内通过生成器完成了调度,让两个函数都有机会执行,这样的调度不是操作系统的进程、线程完成的,而是用户自己设计出来的。
这个程序编写:

  1. 需要使用yield来让出控制权
  2. 需要循环帮助交替执行

事件循环

事件循环是asyncio提供的核心运行机制

columncolumn
asyncio.get_event_loop()返回一个事件循环对象,是asyncio.BaseEventLoop的实例
AbstractEventLoop.stop()停止运行事件循环
AbstractEventLoop.run_forever()一直运行,直到stop()
AbstractEventLoop.run_until_complete(future)运行直至Future对象运行完,返回Future的结果。参数可以是Future类或子类Task的对象。如果是协程对象也会被封装成Task对象
AbstractEventLoop.is_running()返回事件循环的是否运行
AbstractEventLoop.close()关闭事件循环
AbstractEventLoop.create_task(coro使用协程对象创建任务对象

协程

  • 协程不是进程、也不是线程,它是用户空间调度的完成并发处理的方式
  • 进程、线程由操作系统完成调度,而协程是线程内完成调度。它不需要更多的线程,自然也没有多线程切换带来的开销
  • 协程是非抢占式调度,只有一个协程主动让出控制权,另一个协程才会被调度
  • 协程也不需要使用锁机制,因为是在同一个线程中执行
    -** 多CPU下**,可以使用多进程和协程配合,既能进程并发又能发挥协程在单线程中的优势
  • Python中协程是基于生成器的
  • asyncio.iscoroutine(obj) 判断是不是协程对象
  • asyncio.iscoroutinefunction(func) 判断是不是协程函数

Future

  • 和concurrent.futures.Future类似。通过Future对象可以了解任务执行的状态数据
  • 事件循环来监控Future对象是否完成

Task任务

Task类是Future的子类,它的作用就是把协程包装成一个Future对象

协程的使用

3.4引入asyncio,使用装饰器,将生成器函数转换成协程函数,就可以在事件循环中执行了

import asyncio

@asyncio.coroutine
def sleep(x):
    for i in range(3): # 协程函数
        print('sleep {}'.format(i))
        yield from asyncio.sleep(x)
    return "result = {}".format(1000)

# 事件循环
loop = asyncio.get_event_loop()

# 本质就是tasks的ensure_future,把协程包装进一个Future对象中,并使用create_task返回一个task
future = asyncio.ensure_future(sleep(3))

# 内部会调用ensure_future,内部会执行loop.run_forever()
loop.run_until_complete(future)

print('-' * 30)
loop.close()
print(future.result()) # 拿return值
print('===end===')

# 执行结果
sleep 0
sleep 1
sleep 2
------------------------------
result = 1000
===end===

ensure_future(coro_or_future):

  • 如果参数已经是future直接返回
  • 如果是协程,则使用loop.create_task()创建task,并返回task

可以使用create_task得到task对象

import asyncio

@asyncio.coroutine
def sleep(x): # 协程函数
    for i in range(3):
        print('sleep {}'.format(i))
        yield from asyncio.sleep(x)
    return "result={}".format(1000)

# 时间循环
loop = asyncio.get_event_loop()

# create_task返回一个task
task = loop.create_task(sleep(3))
print(1, task) # pending
# 内部会调用ensure_future,内部会执行loop.run_forever()
loop.run_until_complete(task)
print(2, task) # finished

print('-' * 30)
loop.close()
print(task.result()) # 拿return值
print('===end===')

# 执行结果
1 <Task pending coro=<sleep() running at C:/Users/Administrator/PycharmProjects/test/Task/Temporary.py:3>>
sleep 0
sleep 1
sleep 2
2 <Task finished coro=<sleep() done, defined at C:/Users/Administrator/PycharmProjects/test/Task/Temporary.py:3> result='result=1000'>
------------------------------
result=1000
===end===

回调的使用

上面的代码还可以协程

loop = asyncio.get_event_loop()

# 本质就是tasks的ensure_future,把协程包装进一个Future对象中,并返回一个task
# 内部会调用ensure_future,内部会执行loop.fun_forever()
loop.fun_until_complete(sleep(3)) # 包装协程为task

print('-' * 30)
loop.close()
  • 上例中,似乎拿不到sleep(3)这个协程对象的结果future了,run_until_complete函数的返回值就是其参数future对象的返回结果
    -future对象都可以调用add_done_callback(fn)增加回调函数,回调函数是单参的,参数就是future对象

代码如下:

import asyncio

@asyncio.coroutine
def sleep(x): # 协程函数
    for i in range(3):
        print('sleep {}'.format(i))
        yield from asyncio.sleep(x)
    return "result={}".format(1000)

# 回调函数,参数必须是future
def cb(future):
    print('in callback. future = {}'.format(future))
    print(future.result())

# 事件循环
loop = asyncio.get_event_loop()

# create_task返回一个task
task = loop.create_task(sleep(3))
task.add_done_callback(cb) # 增加回调
print(1, task) # pending
# 内部会调用ensure_future, 内部会执行loop.run_forever()
loop.run_until_complete(task)
print(2, task) # finished

print('-' * 30)
loop.close()
print(task.result()) # 拿return值
print('===end===')

# 执行结果
1 <Task pending coro=<sleep() running at C:/Users/Administrator/PycharmProjects/test/Task/Temporary.py:3> cb=[cb() at C:/Users/Administrator/PycharmProjects/test/Task/Temporary.py:11]>
sleep 0
sleep 1
sleep 2
in callback. future = <Task finished coro=<sleep() done, defined at C:/Users/Administrator/PycharmProjects/test/Task/Temporary.py:3> result='result=1000'>
result=1000
2 <Task finished coro=<sleep() done, defined at C:/Users/Administrator/PycharmProjects/test/Task/Temporary.py:3> result='result=1000'>
------------------------------
result=1000
===end===

多个任务执行

import asyncio

@asyncio.coroutine
def a():
    for x in range(3):
        print('a.x', x)
        yield
    return 'a.finished'

@asyncio.coroutine
def b():
    for x in range(3):
        print('b.x', x)
        yield
    return 'b.finished'

print(asyncio.iscoroutinefunction(a), asyncio.iscoroutinefunction(b))

t1 = a()
t2 = b()
print(asyncio.iscoroutine(t1), asyncio.iscoroutine(t2))

# 事件大循环
loop = asyncio.get_event_loop()
tasks = [t1, t2]
# asyncio.wait 会迭代列表中的对象并封装成{f1,f2},返回一个协程对象f
# 循环执行f,它内部等价yield from {f1,f2}
loop.run_until_complete(asyncio.wait(tasks))
loop.close()

# 执行结果
True True
True True
b.x 0
a.x 0
b.x 1
a.x 1
b.x 2
a.x 2

使用回调,如下

import asyncio

@asyncio.coroutine
def a():
    for x in range(3):
        print('a.x', x)
        yield
    return 'a.finished'

@asyncio.coroutine
def b():
    for x in range(3):
        print('b.x', x)
        yield
    return 'b.finished'

print(asyncio.iscoroutinefunction(a), asyncio.iscoroutinefunction(b))


# 事件大循环
loop = asyncio.get_event_loop()


fs = set()
for t in (a(), b()):
    f = asyncio.ensure_future(t)
    f.add_done_callback(lambda f: print(f.result())) # 单个完成就调用回调
    fs.add(f)

# asyncio.wait 会迭代列表中的对象并封装成{f1,f2},返回一个协程对象f
# 循环执行f,它内部等价yield from {f1,f2}
results = loop.run_until_complete(asyncio.wait(fs))
loop.close()

print(results) # 全部结果,全部完成才能看

# 执行结果
True True
a.x 0
b.x 0
a.x 1
b.x 1
a.x 2
b.x 2
a.finished
b.finished
({<Task finished coro=<a() done, \
defined at C:/Users/Administrator/PycharmProjects/test/Task/Temporary.py:3> result='a.finished'>, \
<Task finished coro=<b() done, \
defined at C:/Users/Administrator/PycharmProjects/test/Task/Temporary.py:10> result='b.finished'>}, set())

注意:

run_until_complete方法的返回结果,必须所有任务执行完才能看

新语法

3.5版本开始,Python提供关键字async、await,在语言上原生支持协程

import asyncio

async def sleep(x):
    for i in range(3):
        print('sleep {}'.format(i))
        await asyncio.sleep(x)

loop = asyncio.get_event_loop()
loop.run_until_complete(sleep(3))
loop.close()

# 执行结果
sleep 0
sleep 1
sleep 2
  • async def用来定义协程函数,iscoroutinefunction()返回True
  • 协程函数中可以不包含await、async关键字,但不能使用yield关键字
  • 如同生成器函数调用返回生成器对象一样,协程函数调用也会返回一个对象称为协程对象,iscoroutine()返回True

await语句之后是awaitable对象,可以是协程或者实现了__await__() 方法的对象。await会暂停当前协程执行使loop调度其他协程

import asyncio

@asyncio.coroutine
def w():
    yield

async def a():
    for x in range(3):
        print('a.x', x)
        await w()
    return 'a.finished'

async def b():
    for x in range(3):
        print('b.x', x)
        await w()
    return 'b.finished'

print(asyncio.iscoroutinefunction(a), asyncio.iscoroutinefunction(b))

t1 = a()
t2 = b()
print(asyncio.iscoroutine(t1), asyncio.iscoroutine(t2))

def cb(future):
    print(future.result())

# 事件大循环
loop = asyncio.get_event_loop()
tasks = [t1, t2]
fs = set()
for t in tasks:
    f = asyncio.ensure_future(t)
    f.add_done_callback(cb)
    fs.add(f)

# asyncio.wait 会迭代列表中的对象并封装成{f1,f2}, 返回一个协程对象f
# 循环执行f,它内部等价yield from {f1,f2}
results = loop.run_until_complete(asyncio.wait(fs))
loop.close()

print(results) # 全部结果,全部完成才能看

# 执行结果
True True
True True
a.x 0
b.x 0
a.x 1
b.x 1
a.x 2
b.x 2
a.finished
b.finished
({<Task finished coro=<a() done, \
defined at C:/Users/Administrator/PycharmProjects/test/Task/Temporary.py:7> result='a.finished'>,\
 <Task finished coro=<b() done, \
 defined at C:/Users/Administrator/PycharmProjects/test/Task/Temporary.py:13> result='b.finished'>}, set())

TCP Echo Server举例

import asyncio

# 处理的回调
from asyncio.streams import StreamReader, StreamWriter
async def handle(reader:StreamReader, writre:StreamWriter):
    while True: # 和socketserver类似,一个连接一个handle
        data = await reader.read(1024)
        if not data or data == b'quit':
            print('quit~~~')
            break
        print(type(reader), type(writre))
        client = writre.get_extra_info('peername')
        message = "{} Your msg {}".format(client, data.decode()).encode()
        writre.write(message)
        await writre.drain() # 注意不是flush方法
    writre.close()

loop = asyncio.get_event_loop()
ip = '127.0.0.1'
port = 9999

# 返回一个协程对象
coro = asyncio.start_server(handle, ip, port, loop=loop)
print(asyncio.iscoroutine(coro), coro)
server = loop.run_until_complete(coro) # 返回server
print(server)

try:
    loop.run_forever()
except KeyboardInterrupt:
    pass
finally:
    server.close()
    loop.run_until_complete(server.wait_closed())
    loop.close()

aiohttp库

异步HTTP客户端、服务端框架

安装

$ pip install aiohttp

文档

https://aiohttp.readthedocs.io/en/stable/

开发

  • HTTP Server
from aiohttp import web

async def indexhandle(request:web.Request):
    return web.Response(text=request.path, status=201)

async def handle(request:web.Request):
    print(request.match_info)
    print(request.query_string) # http://127.0.0.1:8080/1?name=12301
    return web.Response(test=request.match_info.get('id', '0000'), status=200)

app = web.Application()
app.router.add_get("/", indexhandle) # http://127.0.0.1:8080/
app.router.add_get("/{id}", handle) # http://127.0.0.1:8080/12301
# app.add_routes([
#     web.get('/', indexhandle),
#     web.get('/{id}', handle),
# ])
web.run_app(app, host='0.0.0.0', port=9977)

HTTP Client

import asyncio
from aiohttp import ClientSession

async def get_html(url:str):
    async with ClientSession() as session:
        async with session.get(url) as res:
            print(res.status)
            print(await res.text())

url = 'http://127.0.0.1:8080/2?age=20&name=jerry'

loop = asyncio.get_event_loop()
loop.run_until_complete(get_html(url))
loop.close()
Python 中用于编写并发代码的库Asyncio asyncio 库是 Python 中用于编写并发代码的库,它采用协程作为其核心编程模型。协程是一种程序组件,允许暂停和恢复执行,而不需要将其内容保存到堆栈中。这种模型使得异步编程更加高效,因为它避免了传统多线程编程中的锁和上下文切换开销。在 asyncio 中,协程是通过async def定义的,并且可以使用await关键字来挂起当前协程的执行,等待另一个协程完成。这种协作式多任务处理方式使得代码在单线程中也能实现并发执行,从而提高了程序的效率和性能。 阅读详情

相关推荐

Python asyncio库核心源码解析

0 前言 Python asyncio库是由Python之父Guido亲自主持开发的Python异步I/O库,Python3.6之后已正式成为标准库中的一员,其提供了async/await语法支持原生协程,使得在Python中进行异步编程变得非常简单。 阅读这篇文章之前最好先阅读文章深入理解Python异步编程,了解一下Python异步编程的发展过程。早期,Python是基于生成器和事件循环来实现的异步编程,当前的async/await原生协程的内部实现机制和早期的基于生成器的实现方案其实也是基本一致的,

Just for fun 2450

7.asyncio库详解

asyncio是 Python 3.4 引入的标准库,用于编写协程和异步代码。它基于事件循环(Event Loop)的概念,通过异步任务(coroutines)和 Future 对象来实现非阻塞的并发操作。异步编程的目标是提高代码执行效率,特别是在需要等待 I/O 操作(如网络请求、文件读写等)时,能够释放 CPU 资源,从而提高程序的并发性能。返回一个包含已完成和未完成任务的元组。返回一个包含所有协程结果的列表。允许你设置等待条件,可以等待任意一个或全部协程完成,或者等待第一个异常。

weixin_39987031的博客 801

掌握 Python 异步编程与 asyncio 库 —— 提升高并发编程效率

本文介绍了 Python 中的异步编程与 `asyncio` 库,强调其在处理高并发场景下的优势。异步编程允许程序在等待 I/O 操作时执行其他任务,提高 CPU 利用率和系统吞吐量。文章详细解析了异步编程的基础概念,包括事件循环、协程和任务,以及如何使用 `asyncio` 创建并发任务。此外,还展示了如何构建一个异步 Web 爬虫,并探讨了高级用法,如异步上下文管理器、迭代器和队列。最后,提供了性能优化和最佳实践建议,帮助开发者写出高效、稳定的异步代码。

Linux内核研究者 2450

【Python】深入理解 Python 的 asyncio 库

多进程:像有多个小明独立完成任务,各自分配独立的资源。多线程:像一个小明在多个任务之间快速切换,但需要管理资源共享和竞争,区别协程的主要地方在电饭锅会主动把小明叫过去(~)。协程:像一个小明有序地、按计划地完成任务,自己管理切换,没有线程切换的开销。

qq_40375355的博客 6575

【Python】深入解密Python异步编程:asyncio库的工作原理与应用指南

[解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界](https://unitymarvel.blog.youkuaiyun.com/article/details/141889588?spm=1001.2014.3001.5502)

一个被知识诅咒的人 2147

不皦不昧的界面之道,老子思想在 SAP Fiori Elements 开发中的工程化落点

摘要(149字): 老子「其上不皦,其下不昧」的哲学与SAP Fiori Elements开发理念高度契合。优秀的界面应避免过度炫技(不皦),如强行用自定义代码替代标准模板;也不可因过度抽象而模糊业务逻辑(不昧),需通过清晰的metadata和annotation定义秩序。Fiori Elements通过预置floorplan模板(如List Report)和运行时动态生成UI,将开发者从冗余编码中解放,转而聚焦业务语义与数据模型设计。例如采购订单应用中,CDS视图与UI注解协同工作,既隐藏技术复杂性,又精

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 768

一文搞明白Python协程编程:asyncio库

本文试图搞明白Python协程编程,通常我们认为线程是轻量级的进程,因此我们也把协程理解为轻量级的线程即微线程

闵行小鱼塘 2367

Python异步编程之道:asyncio库的探索与应用

本文深入探讨了Python中asyncio库的使用及其优势,并通过实例展示了其在异步编程中的应用。传统的同步编程模型在处理I/O密集型任务时,如网络请求、文件读写等,会导致CPU的空闲等待,从而降低程序的执行效率。而异步编程则允许程序在等待I/O操作完成时,继续执行其他任务,从而充分利用CPU资源,提高程序的并发性能。Python的asyncio库是实现异步编程的重要工具,它提供了基于事件循环的并发模型,以及一系列高级API,使异步编程变得更加简单和高效。任务是协程的封装,表示一个正在运行或等待的协程。

铭渊老黄 1245

浅谈Python库之asyncio

asyncio是 Python 中用于编写异步 I/O(输入 / 输出)代码的库。它是在 Python 3.4 版本中引入的,主要基于协程(coroutine)的概念构建。在传统的同步编程中,程序在执行 I/O 操作(如读取文件、网络请求)时会被阻塞,等待操作完成后才能继续执行下一行代码。而asyncio允许程序在等待 I/O 操作时,将执行权交给其他任务,从而实现高效的并发执行。例如,在一个网络爬虫程序中,需要同时向多个网站发送请求获取数据。

a876106354的博客 1428

Python异步编程 - asyncio库

Python异步编程 - asyncio库

孤寒者的博客 1万+

避坑指南:Spring3集成OpenAPI时泛型响应失效的3种解决方案

本文深入探讨了Spring3集成OpenAPI时泛型响应失效的问题,提供了三种实用解决方案:移除@Schema注解、使用@ArraySchema包装泛型以及自定义Schema处理器。针对不同项目规模,详细分析了各方案的适用场景、优缺点及性能影响,帮助开发者高效生成准确的接口文档,提升前后端协作效率。

weixin_30839881的博客 100

【Python】asyncio库的介绍及用法

在这个函数内部,我们调用了await asyncio.sleep(1),这会将程序的执行权交由事件循环,等待1秒钟后,事件循环会重新激活这个协程,继续执行下面的代码。需要注意的是,async和await必须配套使用,你不能在一个非协程函数(没有用async定义的函数)中使用await或者在一个非协程上下文(如普通的函数或方法)中使用async。Python的asyncio库被设计用于处理并发和异步编程,同时提供了基于协程的高级API,以在处理一些I/O密集型操作时提供更好的性能和易用性。

qq_53871375的博客 1593

MR2数据集实战:5步搞定多模态谣言检测模型训练(附完整代码)

本文详细介绍了如何使用MR2多模态数据集构建高精度谣言检测系统,涵盖环境配置、数据准备、多模态特征工程、模型架构设计、训练调优及部署优化等5个关键步骤。通过双线性融合技术处理文本、图像和网页三模态数据,解决特征对齐和模态冲突等工程难题,并提供完整代码实现和性能优化方案。

weixin_42657024的博客 239

python asyncio tcp server_Python中asyncio库的使用

1、asyncio3.4版本以后加入标准库。Asyncio底层基于selectors,看似库,其实就是框架,包含异步IO、时间循环、协程、任务等内容。def a(x=3):for x in range(x):print(x)def b(x=3):for x in range(x):print(x)a()b()上例子中函数调用是串行,不是并行。可以利用方法进行改变。1)利用生成器函数def a(x=...

weixin_39926588的博客 408

l0phtcrack 7(爆破管理员密码)使用教程

l0phtcrack7简称lc7,是爆破计算机管理员密码的软件,早期是网络安全管理员用来检测系统用户是否使用了不安全的密码,后被黑客用于用户口令破解 功能:该工具支持远程破解,理论上能破解所有密码,但对复杂度比较高的密码,破解时间很长 使用前提:1.登录了需要破解的计算机 2.知道需要破解的计算机的一个管理员的账户,密码 ** 也许你会疑惑,我都知道了一个管理员账户密码了,还要另外的管理员密码...

Xiongcanne的博客 2万+

c语言播放背景音乐

相信很多童鞋都在为大学课设而伤透头脑,而背景音乐的使用无疑会成为其中的一个亮点(总比没有好吧(╯▽╰)),故接下来我将介绍一下如何用C播放音乐。我用的编译器是CodeBlocks16.01接下来新建一个C文件建立完后是这样滴然后添加其中mciSendString()函数是由&lt;mmsystem.h&gt;库提供的供播放音乐(MP3)的函数第一个参数是歌曲所在的绝对路径 打开音乐所在位置 复制这...

qq_41443987的博客 3万+

Python 的 asyncio 库

特点:单线程内管理多任务,没有线程切换的开销适合I/O密集型任务需要程序自己管理任务的切换。

409

Yolov5s/Yolov8s网络结构图

yolov8、yolov5网络结构图

Goodness2020的博客 9924

【Python】asyncio 库:实现异步编程

asyncio 库是 Python 标准库的一部分,引入于 Python 3.4(通过 PEP 3156),用于实现异步编程。它提供了一种基于事件循环(Event Loop)的并发机制,适合处理 I/O 密集型任务(如网络请求、文件操作、数据库查询等)。asyncio 通过协程(coroutines)、任务(tasks)和事件循环,允许程序在等待 I/O 操作时执行其他任务,从而提高效率。

彬彬侠的博客 2130

ArcGIS投影变换实战:从WGS_1984到Krasovsky_1940_Albers的精准转换

本文详细解析了在ArcGIS中如何将WGS_1984地理坐标系下的数据精准转换至Krasovsky_1940_Albers投影坐标系。文章通过实战案例,重点阐述了地理坐标系与投影坐标系的区别,并逐步演示了创建自定义地理变换、使用投影栅格工具以及进行批量处理和结果验证的核心操作流程,旨在解决地图数据叠加不准的常见问题。

weixin_29251131的博客 462

【无标题】IP804A参考资料和管脚作用图

3.3V内置led控制内置EEPROM接口,用于哑应用ip804a,可集成为4X N端口PSE稳压器内置支持外部设备。多个系统和IC总线用于从每个IP804A收集PD电源状态,以支持全局电源管理。多个ip804a可以构建一个具有成本效益的PHY级PSE系统以支持PD分类和电源管理,而无需主机。基于LLDP(IEEE标准8023AT-2009的一部分),可以实时维护PSE和PD之间的动态电源管理,以提高电源效率。IP804A是一款用于POE(以太网供电)系统的4端口PSE(电源设备)控制器IC。

2301_78055735的博客 1058

asyncio 库核心方法详解【Python】

asyncio 是 Python 用于编写并发代码的库,使用 async/await 语法。它特别适合 IO 密集型和高并发网络应用。下面我将详细讲解 asyncio 的核心方法。

daada123321的博客 838

CATIA 3DEXPERIENCE R2019x VBA开发介绍

CATIA 3DEXPERIENCE R2019x VBA开发介绍 一、 什么是VBA? 【VBA的官方解释】 VBA(Visual Basic for Applications)是VisualBasic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是MicrosoftOffice软件。它也可说是一种应用程式视觉化的 Basic 脚本。 CATIA提供了多种二次开发的接口,其中包括自动化对象编程(Automation)和

WorkMan的博客 5062

[python] asyncio库常见问题与实践案例

死锁(Deadlock)是并发编程中的一种常见问题,它发生在多个任务之间的资源争用中,导致所有任务都陷入无法继续执行的僵局。即使在Python中使用。

You and Me 2285

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【用Python实现异步编程】asyncio库的基础与应用实例!

异步编程是一种允许程序在等待某些任务完成的同时执行其他任务的编程方式。它不同于传统的同步编程,后者需要一个任务在完成后才能执行下一个任务。异步编程通过在等待任务的过程中释放资源,使其他任务得以执行,从而提高程序的响应性和效率。在异步编程中,协程(coroutine)是核心概念。协程是比函数更为灵活的结构,可以在执行的过程中暂停,并在未来某个时刻恢复执行。asyncio是Python内置的一个标准库,用于编写异步I/O代码。

萧鼎的博客 1092

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

python协程库_python asyncio 协程库的使用

asyncio 是 python 力推多年的携程库,与其 线程库 相得益彰,更轻量,并且协程可以访问同一进程中的变量,不需要进程间通信来传递数据,所以使用起来非常顺手。asyncio 官方文档写的非常简练和有效,半小时内可以学习和测试完,下面为我的一段 HelloWrold,感觉可以更快速的帮你认识 协程 。定义协程import asyncioimport timeasync def say_af...

weixin_32273747的博客 495

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: Python 中 IO多路复用
下一篇: 数据库
鹿夏
博客等级 码龄8年 24粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值