异步并发处理利器:在 Jupyter Notebook 中玩转 asyncio

asyncio.run报错

RuntimeError: asyncio.run() cannot be called from a running event loop
jupyter notebook中运行下述代码就会出现上述报错

import uvicorn
from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()
@app.get(“/”)
def root():
return JSONResponse({“status”:200}, status_code=405)

if name == ‘main’:
uvicorn.run(app, host=“127.0.0.1”, port=8080)

在 Jupyter Notebook 中使用 asyncio.run() 报错通常是因为 Jupyter Notebook 已经运行在一个事件循环(event loop)内部。asyncio.run() 函数是为了启动一个新的异步事件循环而设计的,它不应该在一个已经运行的事件循环内调用。
为了解决这个问题,你可以直接使用事件循环的现有实例来运行你的异步代码,而不是尝试创建一个新的。以下是一个示例,展示了如何在 Jupyter Notebook 中正确地运行异步代码:

import asyncio
async def main():
    # 这里写你的异步代码
    print('Hello')
    await asyncio.sleep(1)
    print('World')
# 在 Jupyter 中,你可以使用下面的方式来运行异步函数
await main()

如果你需要在一个非异步的上下文中运行异步代码,你可以使用如下方法:

import nest_asyncio
# 这行代码使得在已有的 event loop 中可以嵌套运行 asyncio.run
nest_asyncio.apply()
asyncio.run(main())

## nest_asyncio

nest_asyncio 是一个库,允许你在已有的 asyncio 事件循环中运行 asyncio.run()。你可以通过以下命令安装 nest_asyncio

pip install nest_asyncio

在使用 nest_asyncio.apply() 后,你应该能够在 Jupyter Notebook 中正常使用 asyncio.run()。但请注意,通常情况下,在 Jupyter Notebook 中直接使用 await 来调用异步函数更为简单和直接。

import uvicorn
from fastapi import FastAPI
from fastapi.responses import JSONResponse

app = FastAPI()


@app.get("/")
def root():
    return JSONResponse({"status":200}, status_code=405)

import nest_asyncio

if __name__ == '__main__':
    nest_asyncio.apply()
    uvicorn.run(app, host="127.0.0.1", port=8080)

notebook
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值