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

如何在Python中使用timeit为异步函数计时?

解决timeit与await结合的计时问题

你的错误是因为timeit接收的lambda不是异步函数,直接在里面用await会触发语法错误。下面提供两种可行的解决方式:

方法一:用asyncio.run包装异步调用(兼容所有Python版本)

把异步函数调用用asyncio.run包裹,将其转为同步执行,这样就能在timeit的lambda中正常使用:

import asyncio
import ccxt.async_support as ccxt
from timeit import timeit

async def main():
    exchange = ccxt.binance()
    # 验证函数可正常运行
    await exchange.create_test_order()
    # 计时异步调用
    duration = timeit(lambda: asyncio.run(exchange.create_test_order()), number=1)
    print(f"执行耗时:{duration}秒")
    # 务必关闭交易所连接,避免资源泄漏
    await exchange.close()

asyncio.run(main())

方法二:使用Python 3.10+的原生异步计时

Python 3.10及以上版本的timeit.Timer支持async_mode参数,可直接处理异步函数:

import asyncio
import ccxt.async_support as ccxt
from timeit import Timer

async def main():
    exchange = ccxt.binance()
    await exchange.create_test_order()
    # 初始化Timer时指定async_mode为asyncio
    timer = Timer(lambda: exchange.create_test_order(), async_mode='asyncio')
    duration = timer.timeit(number=1)
    print(f"执行耗时:{duration}秒")
    await exchange.close()

asyncio.run(main())

注意事项

  • 无论哪种方法,都要记得调用await exchange.close()关闭交易所连接,防止资源占用。
  • 如果需要多次计时(number参数大于1),建议在计时前先完成初始化,避免重复创建连接影响计时准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:10:30