如何在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
相关产品推荐
相关产品推荐

