脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - 一段代码理解Python异步函数async的基本用法

一段代码理解Python异步函数async的基本用法

2023-10-15 12:16Franciz小测测 Python

异步函数的使用规则,正常情况下我们的函数时串行的运行的,这里称之为主函数,Python异步函数即async必须在普通函数的命名前加上async

异步函数的使用规则

正常情况下我们的函数时串行的运行的,这里称之为主函数.

异步函数:与主函数并行运行.

一段代码理解Python异步函数async的基本用法

 

 

Python异步函数即async必须在普通函数的命名前加上async

示例:

async def case_b():
    print('start', get_time(), 'case_b')
    await asyncio.sleep(1)
    print('end', get_time(), 'case_b')

执行async函数

if __name__ == '__main__':
    asyncio.run(case_b())

async函数内等待:只阻塞当前async函数

await asyncio.sleep(2)
一段代码理解Python异步函数async的基本用法

async函数的代码示例

m_mock安装

import asyncio
import time

from x_mock.m_mock import m_mock


def get_time():
    return m_mock.mock('@time("%H:%M:%S.%f")')


async def case_a():
    print('start', get_time(), 'case_a')
    await asyncio.sleep(2)  # 只阻塞当前函数,所以比case_b 多等 1s,下面这句最后打印
    print('end', get_time(), 'case_a')


async def case_b():
    print('start', get_time(), 'case_b')
    await asyncio.sleep(1)
    print('end', get_time(), 'case_b')


async def main():
    await asyncio.gather(
        case_a(),
        case_b()
    )


if __name__ == '__main__':
    start = time.time()
    # asyncio.run(main())  # 运行方式1

    # 运行方式2
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    print(time.time() - start)
一段代码理解Python异步函数async的基本用法
一段代码理解Python异步函数async的基本用法

通过上述代码示例可以发现case_a和case_b通过async并行运行了,但是case_a由于使用await等待2s比case_b的结果晚一秒出现.

打印异步函数的返回值示例

import asyncio
import time

from x_mock.m_mock import m_mock


def get_time():
    return m_mock.mock('@time("%H:%M:%S.%f")')


async def case_a():
    print('start', get_time(), 'case_a')
    await asyncio.sleep(2)  # 只阻塞当前函数,所以比case_b 多等 1s,下面这句最后打印
    print('end', get_time(), 'case_a')
    return 'case_a'


async def case_b():
    print('start', get_time(), 'case_b')
    await asyncio.sleep(1)
    print('end', get_time(), 'case_b')
    return 'case_b'


async def main():
    return await asyncio.gather(
        case_a(),
        case_b()
    )


if __name__ == '__main__':
    start = time.time()
    # asyncio.run(main())  # 运行方式1,不建议,会有一些报错

    # 运行方式2
    loop = asyncio.get_event_loop()
    print(loop.run_until_complete(main()))
    print(time.time() - start)

 

到此这篇关于一段代码理解Python异步函数async的基本用法的文章就介绍到这了,更多相关内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文地址:https://blog.csdn.net/Franciz777/article/details/129193928

延伸 · 阅读

精彩推荐
  • PythonPython实现计算字符串中出现次数最多的字符示例

    Python实现计算字符串中出现次数最多的字符示例

    这篇文章主要介绍了Python实现计算字符串中出现次数最多的字符,涉及Python针对字符串的遍历、统计等相关操作技巧,需要的朋友可以参考下...

    u0102665796492021-05-19
  • PythonPython定制类你不知道的魔术方法

    Python定制类你不知道的魔术方法

    你知道什么是定制类?Python中包含很多内置的(Built-in)函数,异常,对象。分别有不同的作用,我们可以重写这些功能,希望对大家有所帮助。一起跟随小编...

    Flyme awei11722022-07-21
  • PythonPython3.5面向对象程序设计之类的继承和多态详解

    Python3.5面向对象程序设计之类的继承和多态详解

    这篇文章主要介绍了Python3.5面向对象程序设计之类的继承和多态,结合实例形式详细分析了Python3.5面向对象程序设计中类的继承与多态常见用法及相关注意事...

    loveliuzz5232021-06-19
  • PythonPython实现自动发送邮件功能

    Python实现自动发送邮件功能

    这篇文章主要为大家详细介绍了Python实现自动发送邮件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Stephen_XMC3382020-12-24
  • PythonPython的Flask框架中SERVER_NAME域名项的配置教程

    Python的Flask框架中SERVER_NAME域名项的配置教程

    SERVER_NAME项在Flask的路由配置中至关重要,特别是在配置绝对url和子域名的操作中,这里我们就来看一下Python的Flask框架中SERVER_NAME项的配置教程: ...

    digwtx15692020-05-11
  • Pythonpython从入门到精通(DAY 1)

    python从入门到精通(DAY 1)

    本文是此次python从入门到精通系列文章的第一篇,给大家汇总一下常用的Python的基础知识,非常的简单,但是很全面,有需要的小伙伴可以参考下 ...

    Python教程网2782020-08-04
  • Python教你如何使用Python Tkinter库制作记事本

    教你如何使用Python Tkinter库制作记事本

    让我们看看如何使用 Tkinter 在 Python 中创建一个简单的记事本.这个记事本 GUI 将包含各种菜单,如文件和编辑,使用这些菜单可以完成保存文件、打开文件、编...

    allway27682021-11-29
  • PythonPython+OpenGL制作一个元宵花灯

    Python+OpenGL制作一个元宵花灯

    又是一年元宵节!如果昨天情人节的红包发得手软又心疼,不妨利用Python OpenGL做一盏花灯送给女朋友,也许比红包更能讨她欢心呢...

    天元浪子11682022-09-27