同步函数与异步函数的混用(Python 3.13.0)

"""
1.协程函数必须运行在事件循环中。
2.同一个线程中,事件循环不可嵌套调用。只能有一个事件循环。
3.在同步函数中调用协程:
    3.1 同步函数不处于异步上下文中,需要开启事件循环来运行协程:asyncio.run(async_func())并返回协程结果。
    3.2 同步函数处于异步上下文中:

        3.2.1 上下文事件循环处于未运行
            【启动协程】【非阻塞】
            3.2.1.1 使用 asyncio.run_coroutine_threadsafe() 在同步函数中安全地调度协程。用于在多线程环境中调度协程。返回一个 concurrent.futures.Future 对象,可以通过它获取协程的结果或异常。不会阻塞调用线程。返回:Future 对象
            【启动协程】【阻塞】
            3.2.1.2 使用 asyncio.run_until_complete() 用于在当前运行的事件循环中等待一个协程完成,这通常用于事件循环首次创建时或在主线程中执行时,因为它会阻塞当前线程,直到协程完成,且不会关闭事件循环。。

        3.2.2 上下文事件循环处于运行中
            如果事件循环整在运行中,也就是running是True,则不能直接使用该事件循环来执行新的协程,因为事件循环已经在运行中,不能再次被启动。要么调度,要阻塞。
            【调度协程】【非阻塞】
            3.2.2.1 使用 asyncio.create_task() 用于在异步上下文中并发执行多个协程,并立即调度它。不会阻塞当前协程。但是处于同步函数中,无法使用await,只能将任务返回到上个协程中进行await获取结果。,返回:Task 对象
            3.2.2.2 使用 asyncio.ensure_future() 用于确保一个对象可以被调度执行。如果传入的是协程,会将其包装为 Task 对象。如果传入的是 Future 对象,则直接返回。
"""

 

一、在协程函数中调用同步函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文子阳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值