You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同步函数的循环中正确调用异步函数?

问题原因

你现在的核心问题是:每次调用async_function()只是生成了一个协程对象,但并没有真正调度它执行——协程必须通过await关键字,或者交给异步事件循环处理才会运行,所以才会抛出RuntimeWarning: coroutine 'async_function' was never awaited警告,函数内的逻辑自然也不会执行。

解决方案

根据你的执行需求,有两种常见处理方式:

方式1:顺序执行100个异步任务

如果需要这100次调用按顺序执行,把同步函数改成异步函数,在循环内逐个await协程,最后用asyncio.run()启动整个异步流程:

import asyncio

async def async_function():
    await some_function()

async def async_sync_function():
    for i in range(100):
        await async_function()

# 启动异步逻辑
asyncio.run(async_sync_function())

方式2:并发执行100个异步任务(推荐,效率更高)

如果这100个任务之间没有依赖关系,用asyncio.gather()批量提交协程,让它们并发运行:

import asyncio

async def async_function():
    await some_function()

async def async_sync_function():
    # 批量创建100个协程对象
    tasks = [async_function() for _ in range(100)]
    # 并发执行所有任务
    await asyncio.gather(*tasks)

asyncio.run(async_sync_function())

可选:保留同步函数的写法

如果一定要让sync_function保持同步,可以在内部手动创建并运行事件循环:

import asyncio

async def async_function():
    await some_function()

def sync_function():
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    # 这里可以选择顺序执行或并发执行,示例用并发
    tasks = [async_function() for _ in range(100)]
    loop.run_until_complete(asyncio.gather(*tasks))
    loop.close()

sync_function()

内容的提问来源于stack exchange,提问作者Nakeuh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 01:20:10