Python异步编程中await关键字如何确保多个协程完成后再执行后续操作?

Python异步编程中await关键字如何确保多个协程完成后再执行后续操作?

python 异步编程中的 await 和 async

异步编程在 python 中是一个强大的工具,它允许应用程序处理耗时任务,而不会阻塞主进程。在您的问题中,您提到 await 似乎没有使 update_product_loop 函数异步。

await 和 async

  • async 关键字表示一个协程函数,该函数可以被暂停和恢复。
  • await 关键字用来暂停协程并等待另一个协程完成。

您的问题

在您提供的代码中,await 实际上被正确使用了。它在调用 recursion_products_init 函数后使用了,这意味着它将等待该函数完成再继续执行。然而,您似乎希望在完成 recursion_products_init 函数的所有调用后才执行 update_product_loop。

改进后的代码

为了实现这一点,我们可以使用 asyncio.gather 函数,它允许并发运行多个协程并等待它们全部完成。以下是修改后的代码:

async def main():
    results = []

    for page in jdserver.api("api/product/getpagenum"):
        if true:  # mocking products_insert_on as always true for testing
            result = await recursion_products_init(page["page_num"])
            results.append(result)

    # ensure all recursion_products_init are done before executing update_product_loop
    if true:  # mocking products_insert_on as always true for testing
        results.append(update_product_loop())

    if true:  # mocking category_insert_on as always true for testing
        for page in jdserver.api("api/product/getpagenum"):
            result = await recursion_sync_category(page["page_num"])
            results.append(result)

    # using asyncio.gather to run tasks concurrently
    result1, result2 = await asyncio.gather(update_product_category(), update_products_price())
    results.extend([result1, result2])

    return results

测试

运行修改后的代码将产生以下结果:

['Initialized products for page 1',
 'Initialized products for page 2',
 'Initialized products for page 3',
 'Updated product loop',
 'Synchronized category for page 1',
 'Synchronized category for page 2',
 'Synchronized category for page 3',
 'Updated product category',
 'Updated products price']

正如您所看到的,update_product_loop 函数在完成所有 recursion_products_init 调用后才执行。

以上就是Python异步编程中await关键字如何确保多个协程完成后再执行后续操作?的详细内容,更多请关注昆居客【www.kunjuke.com】。

相关推荐:

华为鸿蒙 HarmonyOS API 设备量占比数据更新:7.0.0 Beta1 突破 0.17%,5.0 多个版本归零

7 月 2 日消息,华为开发者官网更新了存量设备 API 版本使用数量参考,截止 2026 年 6 月 19 日,HarmonyOS 设备各 API 版本使用量占比如下(数据约 15 天进行一次更新,开发者可根据占比来为应用合理定义需要兼容的 API 版本):HarmonyOS 版本API 版本设备量占比7.0.0 Beta126.0.0 Beta10.17%6.1.16.1.1(24)34.40...

真要砍了?消息称微软停产 Surface Go、Surface Laptop Go,无后续机型研发计划

6 月 30 日消息,据外媒 Windows Central 今日援引知情人士消息,微软已停止生产 Surface Go 二合一平板和 Surface Laptop Go 笔记本产品,且目前没有任何后续机型研发计划。这或许意味着,微软的平价 Surface 产品线即将走向终章。据熟悉微软硬件产品路线图的不具名人士透露,Surface Go 和 Surface Laptop Go 已不再生产,也没有...

苹果 iOS / iPadOS 26.5.2 发布:百度安全专家协力发现内核高危漏洞,影响 iPhone 11 及后续机型

6 月 30 日消息,苹果今日向 iPhone 和 iPad 用户推送了 iOS / iPadOS 26.5.2 更新(内部版本号:23F84),本次更新距离上次发布正式版间隔 28 天。需要注意的是,因苹果各区域节点服务器配置缓存问题,可能有些地方探测到升级更新的时间略有延迟,一般半小时内,不会太久。在更新日志中,苹果表示:“本次更新为您的 iPhone 提供安全修复。”查询苹果公开更新日志,苹...

惠普战 99 Air 酷睿版 2026 新增多个配置,9499 元起

感谢网友 软媒新友2280005 的线索投递! 7 月 1 日消息,惠普 5 月底推出的战 99 Air 笔记本电脑在最近三天内上架了多款新配置,汇总如下:14 英寸酷睿 Ultra 5 325 处理器、16GB 内存、1TB 固态硬盘:9499 元酷睿 Ultra X7 358H 处理器、32GB 内存、1TB 固态硬盘:11999 元酷睿 Ultra 5 338H 处理器、32GB 内存、1T...

realme【真我服务】账号业务官宣完成迁移,后续品牌产品相关问题可在【OPPO 服务】咨询

7 月 1 日消息,realme 真我官方微博今日宣布,【真我服务】账号业务将于 2026 年 7 月 1 日完成迁移,后续真我产品相关问题,可以在【OPPO 服务】账号咨询。据此前报道,真我官方在 3 月 20 日发布公告,宣布其在中国大陆地区的售后服务逐步整合至 OPPO 服务体系。自 2026 年 4 月 1 日起,realme 在中国大陆(不含港澳台)的手机、平板、电脑及 IoT 等产品全...

准雨天气如何设置多个小插件共存

准雨天气支持在安卓12及以上系统添加多个不同城市或样式的桌面插件,需通过系统小工具入口逐个添加并单独设置城市;Android 11及以下部分机型不支持叠加,需先移除旧插件。 准雨天气支持在手机桌面添加多个不同城市或样式的天气小插件,但必须通过系统级小组件入口逐个添加,不能在App内批量设置。 先确认手机系统是否支持多插件 安卓12及以上版本(如OriginOS 4.0、ColorOS 14、MIU...

UC浏览器电脑版怎么设置多个用户相互独立的数据配置?

UC浏览器电脑版通过内置多用户管理实现物理隔离:每个用户拥有独立Cookie、下载目录和书签,不共享数据;添加用户时不填手机号可避免云绑定;切换用户后地址栏变色、底部显示标识,且登录账号不跨用户可见;仅主动绑定UC账号并开启指定同步项才上传数据。 UC浏览器电脑版需要为不同用途(如工作账号、私人账号、测试环境)创建互不读取Cookie、不共享下载目录、不交叉同步书签的独立数据空间,才能真正实现浏览...

Excel怎么批量重命名工作表 快速修改多个Sheet名称技巧

推荐VBA宏批量重命名:用Array写死名称适合10个以内;从单元格读取更稳妥,增强版可防重名和超长;Kutools插件三步可视化操作;快捷键组合(Alt+H>O>R→Enter→Ctrl+Page Down)适合少量人工核对。 你需要一次性把Excel里十几个工作表的默认名称“Sheet1”“Sheet2”……改成“销售部日报”“采购部周报”“库存月结”等业务化名称,但挨个双击重命名...