PythonGolang IPC桥,Goridge的python客户端
pygoridge的Python项目详细描述
Pygoridge:Python到golangipc桥,用于Goridge的Python客户端
Pygoridge是一个Python-to-Golang编解码器库,可以在sockets和golangnet/rpc包上工作。
这是一个优秀的Goridge库的php客户端的python端口。
该库允许您从Python调用Go服务方法,只需占用最少的空间、结构和[]byte
支持。在
Pygoridge还包括Worker
类,在工作进程中使用https://github.com/spiral/roadrunner-高性能应用服务器、负载平衡器和Golang编写的进程管理器。在
特点
- 无外部依赖项
- 可与RoadRunner一起使用,以创建CPU密集型服务器,并使用简单的顺序python工作线程(无需多处理模块)。这对克服GIL非常有帮助。在
安装
$ go get "github.com/spiral/goridge"
^{pr2}$
示例:python客户机调用go服务器方法
frompygoridgeimportcreate_relay,RPC,SocketRelayrpc=RPC(SocketRelay("127.0.0.1",6001))# or, using factorytcp_relay=create_relay("tcp://127.0.0.1:6001")unix_relay=create_relay("unix:///tmp/rpc.sock")stream_relay=create_relay("pipes")print(rpc("App.Hi","Antony"))rpc.close()# close underlying socket connection# or using as a context managerwithRPC(tcp_relay)asrpc:print(rpc("App.Hi","Antony, again"))
packagemainimport("fmt""github.com/spiral/goridge""net""net/rpc")typeAppstruct{}func(s*App)Hi(namestring,r*string)error{*r=fmt.Sprintf("Hello, %s!",name)returnnil}funcmain(){ln,err:=net.Listen("tcp",":6001")iferr!=nil{panic(err)}rpc.Register(new(App))for{conn,err:=ln.Accept()iferr!=nil{continue}gorpc.ServeCodec(goridge.NewCodec(conn))}}
示例:使用python workers运行http服务器(RoadRunner)
您可以从releases page下载最新的RoadRunner二进制文件。在
另请参见^{
cd examples/roadrunner/http_server/ python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt
工人阶级
fromfunctoolsimportpartialimportujsonfrompygoridgeimportcreate_relay,Workerjson_dumps=partial(ujson.dumps,ensure_ascii=False,escape_forward_slashes=False)json_loads=ujson.loadsclassHTTPWorker(Worker):defhello(self,headers):returnheaders,{"X-Server":"RoadRunner with python workers"}if__name__=="__main__":rl=create_relay("pipes")worker=HTTPWorker(rl,json_encoder=json_dumps,json_decoder=json_loads)whileTrue:context,body=worker.receive()ifcontextisNone:continuehttp_headers=json_loads(context.tobytes())response,response_headers=worker.hello(http_headers)worker.send(json_dumps(response).encode("utf-8"),response_headers)
运行RoadRunner服务器
cd examples/roadrunner/http_server/
./rr serve -d -v
发出http请求以将请求头作为响应体返回
curl 'http://localhost:8080/' --compressed
RoadRunner是高度可定制和可扩展的,因此您甚至可以使用所需的API协议为其编写自己的插件(请参见示例php-grpc server)。在
定制编码器/解码器,加快json处理速度
frompygoridge.jsonimportjson_dumps,json_loads# you can also provide custom json encoder for faster marshallingrpc=RPC(tcp_relay,json_encoder=json_dumps,json_decoder=json_loads)
许可证
麻省理工学院执照。有关详细信息,请参见^{
发展
运行eh3测试>docker-compose -f ./goridge/tests/docker-compose.yml up -d
docker-compose -f tests/rr_test_app/docker-compose.yml up -d
python3 -m unittest discover -s tests
运行linter
pip install flake8
flake8 pygoridge
标签:
- 项目
pip install flake8
flake8 pygoridge
标签: