首页 > 其他分享 >asyncio的常用方法

asyncio的常用方法

时间:2024-06-24 10:57:01浏览次数:11  
标签:异步 常用 task async main 方法 def asyncio

以下是一些 asyncio 常用方法的代码示例,以及相应的中文说明:

  1. asyncio.run() - 运行顶层的异步函数。

    async def main():
        print("Hello, asyncio!")
    
    asyncio.run(main())
    

    中文说明:asyncio.run() 启动事件循环,运行 main() 这个顶层异步函数。

  2. asyncio.create_task() - 创建并返回一个任务。

    async def my_task(name):
        print(f"Task {name} is running")
    
    async def main():
        task1 = asyncio.create_task(my_task("A"))
        task2 = asyncio.create_task(my_task("B"))
    
        await task1
        await task2
    
    asyncio.run(main())
    

    中文说明:在 main() 函数中,我们创建了两个异步任务 task1task2,分别运行 my_task() 函数。

  3. asyncio.gather() - 等待多个异步操作完成。

    async def my_task(name):
        await asyncio.sleep(1)
        return f"Result of task {name}"
    
    async def main():
        results = await asyncio.gather(
            my_task("A"), my_task("B"), return_exceptions=True
        )
        print(results)
    
    asyncio.run(main())
    

    中文说明:asyncio.gather() 用于等待多个异步任务完成,并返回它们的返回值或异常。

  4. asyncio.sleep() - 异步等待一段时间。

    async def main():
        print("Start sleeping for 2 seconds")
        await asyncio.sleep(2)
        print("Woke up after 2 seconds")
    
    asyncio.run(main())
    

    中文说明:asyncio.sleep() 允许当前任务在指定的秒数内暂停执行,同时事件循环可以运行其他任务。

  5. asyncio.get_event_loop() - 获取当前线程的事件循环。

    loop = asyncio.get_event_loop()
    print("Current event loop:", loop)
    

    中文说明:获取当前线程的事件循环实例。

  6. asyncio.open_connection() - 异步打开 TCP 连接。

    async def fetch(host, port):
        reader, writer = await asyncio.open_connection(
            host, port, loop=asyncio.get_event_loop()
        )
        print(f"Connected to {host}:{port}")
    
    asyncio.run(fetch('example.com', 80))
    

    中文说明:asyncio.open_connection() 用于异步地打开到指定主机和端口的 TCP 连接。

  7. asyncio.streams.open_connection() - 打开流式连接。

    async def main():
        reader, writer = await asyncio.streams.open_connection('example.com', 80)
        print("Connection opened")
    
    asyncio.run(main())
    

    中文说明:asyncio.streams.open_connection() 用于打开一个流式的连接,返回一个读取器和一个写入器。

  8. asyncio.Lock - 获取一个异步锁。

    lock = asyncio.Lock()
    
    async def critical_section():
        async with lock:
            # 临界区代码
            print("Critical section is running")
    
    async def main():
        await asyncio.gather(critical_section(), critical_section())
    
    asyncio.run(main())
    

    中文说明:使用 asyncio.Lock() 创建一个异步锁,以保护临界区代码,防止多个任务同时执行。

  9. asyncio.Queue - 使用异步队列。

    queue = asyncio.Queue()
    
    async def producer():
        for i in range(5):
            await queue.put(i)
            print(f"Produced {i}")
    
    async def consumer():
        while True:
            item = await queue.get()
            print(f"Consumed {item}")
            queue.task_done()
    
    async def main():
        await asyncio.gather(producer(), consumer())
    
    asyncio.run(main())
    

    中文说明:创建一个异步队列 queueproducer() 函数生产数据并放入队列,consumer() 函数从队列中取出并消费数据。

标签:异步,常用,task,async,main,方法,def,asyncio
From: https://www.cnblogs.com/full-stack-linux-new/p/18264555

相关文章

  • 同样的软件版本、安装方法,但互联网环境就没有报错,是不是哪个地方设置不对?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【斌】问了一个Python第三方库离线下载后使用失败的问题,问题如下:再次请教大佬,还是上述问题,同样的软件版本、安装方法,但互联网环境就没有报错,是不是哪个地方设置不对?@隔壁......
  • Python 字符串拼接方法
    字符串的拼接方式有多种:s='nice't='meetyou'r='!'1.利用字符串的格式化%s来拼接字符串。‘%s%s%s’%(s,t,r)结果:‘nicemeetyou!’2.利用join方法来拼接字符串。''.join([s,t,r])结果:‘nicemeetyou!’3.利用加号"+"来拼接字符串。s+t+r结果:‘......
  • C# WinForm给ToolStrip工具栏扩展一个CheckBox单选框类型按钮的方法
    [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.ToolStrip)]publicpartialclassToolStripCheckBox:ToolStripItem{privateboolIsChecked=false;publicboolHasChecked{get......
  • 从移动切换到电信IP:详细介绍两种方法
    在当前的互联网环境中,用户可能会因为各种原因需要切换网络服务提供商,比如从移动切换到电信。这种切换不仅涉及到网络服务的变更,还可能意味着IP地址的改变。那么,移动的怎么切换成电信的IP?下面一起来了解一下吧。方法一:物理更换网络服务如果您想要从移动的网络服务完全切换到......
  • 面向卫星遥感的红外微小舰船目标检测方法:MTU-Net
    论文简介空间红外微小舰船检测旨在从地球轨道卫星所拍摄的图像中识别并分离出微小舰船。由于图像覆盖面积极其广大(如数千平方公里),这些图像中的候选目标相比空中或地面成像设备观测到的目标,尺寸更小、亮度更低且变化更多。现有的基于短距离成像的红外数据集和目标检测方法难以......
  • docker常用命令
    dockerps查看当前正在运行的容器dockerps-a查看所有容器的状态dockerstart/stop/restartid/name启动/停止/重启某个容器dockerattachid进入某个容器(使用exit退出后容器也跟着停止运行)dockerexec-itid/bin/bash启动一个伪终端以......
  • 【Jmeter压力测试之梯度加压的三种方法完整教程】
    一、前言        今天主要和大家介绍一下梯度增压的方式进行性能压测,做性能的时候,经常会遇到某些场景需要进行逐渐加压的方式,达到接口性能的瓶颈,之前和大家已经分享了性能测试的并发压力测试以及Jmeter的安装和基本使用,接下来就给大家详细介绍梯度增压的完成流程。二......
  • 爬取同样内容,xpath方法会比bs4要慢很多吗?
    大家好,我是Python进阶者。一、前言前几天在Python白银交流群【沐子山树】问了一个Python网络爬虫的问题,问题如下:爬取同样内容,xpath方法会比bs4要慢很多吗?二、实现过程这里【Kimi】给了个思路如下:爬取网页内容时,使用XPath和BeautifulSoup(bs4)这两种方法的速度差异通常不会特别......
  • WPF中ComboBox几种数据绑定的方法
    一、用字典给ItemsSource赋值XMAL、<ComboBoxName="cmb_list"Grid.Row="1"Grid.Column="1"Height="23"DisplayMemberPath="Value"SelectedValuePath="Key"SelectionChanged="cmb1_SelectionChanged"......
  • 机器学习回归预测方法介绍:优缺点及适用情况
            机器学习中的回归任务是预测连续变量的值,这在金融、医疗、市场分析等领域有着广泛的应用。本文将介绍几种常见的机器学习回归方法,探讨它们的基本原理、优缺点及适用情况。1.线性回归(LinearRegression)基本介绍:线性回归是一种基础的回归方法,用于建立自变量......