当前位置: 首页 > article >正文

异步并发处理利器:在 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
在这里插入图片描述


http://www.kler.cn/a/287577.html

相关文章:

  • 【分布式技术】分布式缓存技术-旁路缓存模式(Cache Aside Pattern)
  • linux之调度管理(5)-实时调度器
  • workerman的安装与使用
  • Uni-APP+Vue3+鸿蒙 开发菜鸟流程
  • 【Go】-bufio库解读
  • 定时器简介
  • Html 添加音效音乐音频播放和震动效果
  • Python测试开发基础(三)---random模块
  • form-data和x-www-form-urlencoded的区别
  • 银行业务-结算、代理、托管
  • 【C++】将myString类中能够实现的操作都实现一遍
  • Golang | Leetcode Golang题解之第388题文件的最长绝对路径
  • STM32:TIM定时中断配置的最全库函数讲解笔记
  • 微博视频无水印下载的方法
  • 点餐收银小程序
  • mybatis自定义复杂条件拼接
  • element-ui 表单Cannot read property ‘indexOf‘ of undefined
  • 智能体与在线实用工具:协同并进,提升生活效率
  • 安达发|户外设备制造APS排程的多层级BOM订单拉动
  • 逆向中的游戏-入土为安的第二十五天
  • matlab2024a/2023/2022/2020/matlab2019 如何plot画局部放大图(已解决)
  • Redis的内存淘汰策略—— volatile-random
  • unity的语言问题记录(委托相关)
  • 《从C/C++到Java入门指南》- 26.record 类+多态
  • python 字典怎么提取value
  • 测试框架到底是什么,如何定义?