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

Python调试时如何在控制台调用异步函数?

在PyCharm调试控制台调用异步函数的解决方案

问题描述

调试时习惯在控制台调用函数快速验证结果,但异步函数无法直接操作。示例代码如下:

import asyncio

async def func1():
    print('func1')

def func2():
    print('func2')

async def main():
    task = asyncio.create_task(func1())
    await task  # 在此处设置断点

asyncio.run(main())

在await task行设置断点后,控制台调用func2()可正常输出,但输入await task会触发错误:

File ".../anaconda3/lib/python3.9/asyncio/base_events.py", line 585, in _check_running
    raise RuntimeError(
RuntimeError: Cannot run the event loop while another loop is running

环境:Python 3.9、PyCharm 2022.3.1

解决方法

可以通过以下几种方式实现调试控制台对异步函数的调用:

方法1:复用当前事件循环执行任务

在控制台输入以下代码,利用调试时已运行的事件循环来执行异步任务,避免启动新循环导致冲突:

import asyncio
# 等待已创建的task
asyncio.get_running_loop().run_until_complete(task)
# 直接运行新的异步函数
asyncio.get_running_loop().run_until_complete(func1())

方法2:开启PyCharm异步调试支持

PyCharm 2020.1及以上版本支持直接在调试控制台使用await,需先配置:

  • 打开File > Settings > Build, Execution, Deployment > Python Debugger
  • 勾选Asyncio debugging选项
  • 重启调试会话后,即可直接在控制台输入await func1()或await task执行

方法3:封装同步调用工具函数

如果需要频繁调用异步函数,可提前定义同步包装函数,调试时直接调用:

def sync_call_async(func, *args, **kwargs):
    import asyncio
    return asyncio.get_running_loop().run_until_complete(func(*args, **kwargs))

调试时输入sync_call_async(func1)即可执行异步函数func1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:00:34