Python asyncio 异步

Python asyncio 异步案例

import asyncio

# import nest_asyncio
# nest_asyncio.apply()

# 定义一个异步函数
async def greet(name):
    print("Hello, " + name)
    await asyncio.sleep(2)  # 使用异步的sleep函数
    print("Goodbye, " + name)

# 执行异步函数
async def main():
    # 创建任务并发执行
    task1 = asyncio.create_task(greet("码农"))
    task2 = asyncio.create_task(greet("研究僧"))

    # 等待所有任务完成
    await asyncio.gather(task1, task2)

# 运行主函数
if __name__ == "__main__":
    # asyncio.run(main())
    loop = asyncio.get_running_loop()
    task = loop.create_task(main())
Hello, 码农
Hello, 研究僧
Goodbye, 码农
Goodbye, 研究僧
import asyncio

async def my_coroutine():
    await asyncio.sleep(1)
    print("Coroutine executed")

async def main():
    task = asyncio.create_task(my_coroutine())
    await task  # 等待任务执行完成

# asyncio.run(main())

loop = asyncio.get_running_loop()
task = loop.create_task(main())

"""
asyncio.create_task(coroutine)
asyncio.create_task() 用于创建一个协程任务,并安排其立即执行
接受一个协程对象作为参数,并返回一个任务对象
该任务对象可以用来控制和管理该协程的执行,包括取消、等待其执行完成等  
"""
import asyncio
from datetime import datetime

# import nest_asyncio
# nest_asyncio.apply()

# 定义一个异步函数
async def greet(name):
    print("Hello, " + name + str(datetime.now()))
    await asyncio.sleep(2)  # 使用异步的sleep函数
    print("Goodbye, " + name + str(datetime.now()))

# 执行异步函数
async def main():
    # 创建任务并发执行
    task1 = asyncio.create_task(greet("码农"))
    task2 = asyncio.create_task(greet("研究僧"))

    # 等待所有任务完成
    await asyncio.gather(task1, task2)

if __name__ == "__main__":
    start = datetime.now()  # 记录程序开始执行的时间
    # asyncio.run(main())  # 运行主函数
    loop = asyncio.get_running_loop()
    task = loop.create_task(main())
    end = datetime.now()  # 记录程序结束执行的时间
    print('elapsed time =', end - start)  # 输出执行时间

# 运行主函数
if __name__ == "__main__":
    # asyncio.run(main())
    loop = asyncio.get_running_loop()
    task = loop.create_task(main())

"""
asyncio.create_task() 和 asyncio.gather() 是 Python 中 asyncio 模块中的两个重要函数,用于创建和管理协程任务。
都用于在异步编程中管理多个协程的执行,但是有着不同的作用和用法。
总的来说,asyncio.create_task() 用于并发执行多个协程任务,而 asyncio.gather() 用于等待多个协程任务的全部完成,并且可以收集执行结果
这两个函数是 asyncio 中协程任务管理的重要工具。  
"""
elapsed time = 0:00:00

Hello, 码农2024-05-15 15:59:49.143083
Hello, 研究僧2024-05-15 15:59:49.144086
Hello, 码农2024-05-15 15:59:49.144086
Hello, 研究僧2024-05-15 15:59:49.144086
Goodbye, 码农2024-05-15 15:59:51.157516
Goodbye, 码农2024-05-15 15:59:51.157516
Goodbye, 研究僧2024-05-15 15:59:51.157516
Goodbye, 研究僧2024-05-15 15:59:51.157516
"""
asyncio.gather(*coroutines_or_futures, return_exceptions=False)
asyncio.gather() 用于同时运行多个协程,并等待全部完成
接受一系列的协程对象(或者 Future 对象)作为参数,并返回一个协程对象,该协程对象会在所有给定的协程都执行完毕后完成
"""

import asyncio

async def coro1():
    await asyncio.sleep(1)
    return "Coroutine 1"

async def coro2():
    await asyncio.sleep(2)
    return "Coroutine 2"

async def main():
    result = await asyncio.gather(coro1(), coro2())
    print(result)

# asyncio.run(main())
loop = asyncio.get_running_loop()
task = loop.create_task(main())
['Coroutine 1', 'Coroutine 2']

字符串拼接

对于输出函数来说,一般都由字符串组成,如果使用其他非字符串则需要进行转化

datetime.now()返回的是一个datetime对象,不能直接与字符串拼接,需要将datetime对象转换为字符串类型才能进行拼接

使用str()函数将datetime对象转换为字符串

print("Hello, " + name + ", 时间:" + str(datetime.now()))
print("Hello, {}, 时间: {}".format(name, datetime.now()))
print(f"Hello, {name}, 时间: {datetime.now()}")