FastAPI中如果调用同步函数
在python的整体生态中,虽然已经有很多库支持了异步调用,如可以使用httpx或者aiohttp代替requests库发起http请求,使用asyncio.sleep 代替time.sleep, 但是依然还有很多优秀的第三方库是不支持异步调用也没有可代替的库,那么如何在FastAPI中调用这种没有实现异步的库但是又不阻塞整个系统呢?
在python的整体生态中,虽然已经有很多库支持了异步调用,如可以使用httpx或者aiohttp代替requests库发起http请求,使用asyncio.sleep 代替time.sleep, 但是依然还有很多优秀的第三方库是不支持异步调用也没有可代替的库,那么如何在FastAPI中调用这种没有实现异步的库但是又不阻塞整个系统呢?
最近使用阿里云模型服务灵积,上面有很多开源的大模型提供接口调用,阿里自家通义千问也在,申请体验了一下,结果并不那么尽如人意,参看之前的文章,本文先不讨论大模型质量问题,本文讨论一下如果通过LangChain来调用灵积接口,并且通过gradio构建一个web服务demo。
这两天使用阿里的模型服务灵积平台,在上面开通了通义千问的使用权限,迫不及待的想要体验一下,但是结果似乎有点拉胯。。。且听我慢慢道来。
今年随着ChatGPT的爆火,也带火了一种前后端数据通信模式,使用SSE,可以让服务端一边生成内容,一边将数据返回给客户端,这样客户端可以不用等待服务端将内容全部生成。本文介绍如何在FastAPI中使用这种SSE方式返回数据,并且使用requests和aiohttp这两个第三方库调用这种SSE接口并且展示数据。
最近在学习大模型相关内容的时候,由于本地没有强大的显卡资源,很多模型是跑不起来的,但是看到阿里云机器学习平台PAI提供了一些免费的试用资源,于是准备薅一波羊毛,亲自玩一波大模型开发与微调。
接下来我将通过一系列的文章来记录一下,使用阿里云的免费资源来玩一些好玩的AIGC相关应用,主要包括ChatGLM2-6B、Llama2、通义千问、Stable Diffusion,模型微调相关的内容。
前两篇文章介绍了在golang中使用原生的rpc和使用json做为序列化工具进行rpc开发,但是它们都有着各自的缺点,原生的rpc不能跨语言,json在序列化和反序列化时效率又不高,所以本文我们再来学习一下grpc的使用,它完美的解决了它们的缺点
https://github.com/protocolbuffers/protobuf/releases
将下载的可执行文件放到对应系统的环境变量中,windows 中可以将protoc 目录添加到环境变量,mac 中可以将protoc 文件放到 /usr/local/bin
目录下,输入 protoc --version
来验证一下是否执行成功。
|
|
安装成功之后会在$GOPATH/bin/
目录下生成一个protoc-gen-go 文件
proto 文件与go 中的结构体一一对应,如果我们在go 中定义一个User的结构体
|
|
上文介绍了如何在golang 中使用原生的net/rpc
进行开发,但是使用原生的rpc有一个问题,不能跨语言,只能服务端和客户端都是golang时才可以,本文介绍如何使用json作为序列化在不同的语言间进行rpc调用。
首先我们先来修改一个服务端的代码,之前的代码中,服务端收到客户端发来的数据以后,是通过 rpc.ServeConn(conn)
来处理请求的
|
|
如果要使用json来处理的话,只需要将原来的rpc.ServeConn(conn)
修改为 rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
即可。
很早之前也了解过一些rpc, 但是心理始终接受不了这种东西,觉得http 用的好好的,为什么要那么麻烦的使用rpc? 且还要定义什么proto 文件 ,后来看了一篇文章 ,既然业内都在使用并且都快成为一种行业标准了,必然有它的优势。 以下是文章原文
go 标准库的 net\rpc
对rpc原生的支持,我们先来看一下使用go标准库是如何开发rpc应用的。
服务端开发主要分为以下四步
在golang中,goroutine 可以理解为其它语言中的线程,在其它语言中存在的数据竞态的问题,在golang中同样存在
本文记录一下数据竞态与各种锁的使用
这个词也没有听起来很高大上,其实并没有什么新鲜的东西,就是多个协程对同一个变量进行读写,造成了状态不一致,得不到正确的结果,我们来看一下代码
|
|
相信很多人对于golang中的context 都有一定的了解,都知道它是一个上下文管理,有一个根context, 再通过这个根context 创建出有更多功能的context, 如具有cancel 功能的,有timeout功能的。 我们搜索的时候,我们可能看到最多的就是以下的代码