어떻게 Python 으로 gRPC 서 비 스 를 구축 합 니까?
gRPC 서비스의 대체 구성 도 는 다음 과 같다.
그림 1 에 따 르 면 grpc 의 서 비 스 는 언어 를 뛰 어 넘 지만 같은 프로 토 콜(proto)을 따라 야 한다.REST 서비스 에 비해 gPRC 의 뚜렷 한 장점 은 바 이 너 리 인 코딩 을 사 용 했 기 때문에 JSON/HTTP 보다 빠 르 고 뚜렷 한 인터페이스 규범 과 스 트림 전송 을 지원 하 는 것 이다.그러나 그의 실현 은 rest 서비스 에 비해 약간 복잡 하 다.다음은 gRPC 서 비 스 를 구축 하 는 절 차 를 간단하게 소개 한다.
2.python 설치 에 필요 한 라 이브 러 리
pip install grpcio
pip install grpcio-tools
pip install protobuf
3.gRPC 의 인 터 페 이 스 를 정의 합 니 다.
gRPC 서 비 스 를 만 드 는 첫 번 째 단 계 는.proto 파일 에서 인 터 페 이 스 를 정의 하 는 것 입 니 다.proto 는 프로 토 콜 파일 입 니 다.클 라 이언 트 와 서버 의 통신 인 터 페 이 스 는 바로 proto 파일 협정 을 통 해 서로 다른 언어 에 따라 대응 하 는 코드 파일 을 생 성 할 수 있 습 니 다.이 프로 토 콜 파일 은 주로 서비스(service)인터페이스 와 요청 매개 변수 와 해당 하 는 결과 의 데이터 구 조 를 정의 하 는 것 입 니 다.다음은 간단 한 예 입 니 다.
syntax = "proto3";
option cc_generic_services = true;
//
service GrpcService {
rpc hello (HelloRequest) returns (HelloResponse) {} // ,
}
//
message HelloRequest {
string data = 1; // 1,2 ,
Skill skill = 2; // ,
};
//
message HelloResponse {
string result = 1;
map<string, int32> map_result = 2; // map , dict
};
message Skill {
string name = 1;
};
4.protoc 와 해당 하 는 플러그 인 컴 파일 을 사용 하여 해당 하 는 언어 코드 를 생 성 합 니 다.python -m grpc_tools.protoc -I ./ --python_out=./ --grpc_python_out=. ./hello.proto
컴 파일 도 구 를 이용 하여 proto 파일 을 py 파일 로 바 꾸 고 현재 파일 디 렉 터 리 에서 상기 코드 를 직접 실행 하면 됩 니 다.
1.-I proto 가 있 는 디 렉 터 리 를 지정 합 니 다.
2.m protoc 를 통 해 py 파일 생 성 지정
3.--python_out py 파일 을 만 드 는 출력 경 로 를 지정 합 니 다.
4.hello.proto 가 입력 한 proto 파일
위 명령 을 실행 하면 hello 생 성pb2.py 와 hellopb2_grpc.py 이 두 파일.
5.grpc 서버 코드 작성
#! /usr/bin/env python
# coding=utf8
import time
from concurrent import futures
import grpc
from gRPC_example import hello_pb2_grpc, hello_pb2
_ONE_DAY_IN_SECONDS = 60 * 60 * 24
class TestService(hello_pb2_grpc.GrpcServiceServicer):
'''
GrpcServiceServicer, hello
'''
def __init__(self):
pass
def hello(self, request, context):
'''
hello , pb HelloResponse
:param request:
:param context:
:return:
'''
result = request.data + request.skill.name + " this is gprc test service"
list_result = {"12": 1232}
return hello_pb2.HelloResponse(result=str(result),
map_result=list_result)
def run():
'''
:return:
'''
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
hello_pb2_grpc.add_GrpcServiceServicer_to_server(TestService(),server)
server.add_insecure_port('[::]:50052')
server.start()
print("start service...")
try:
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
server.stop(0)
if __name__ == '__main__':
run()
서버 측 에 서 는 proto 파일 의 GrpcService 인터페이스 수 요 를 충족 시 키 기 위해 hello 방법 이 필요 합 니 다.hello 방법의 입력 매개 변 수 는 proto 파일 에서 정 의 된 HelloRequest 입 니 다.context 는 필드 를 유지 하고 상관 하지 않 습 니 다.반환 매개 변 수 는 proto 에서 정 의 된 HelloResponse 입 니 다.서비스 시작 코드 는 표준 입 니 다.수요 에 따라 서 비 스 를 제공 하 는 ip 주소 와 포트 번 호 를 수정 할 수 있 습 니 다.6.gRPC 클 라 이언 트 의 코드 작성
#! /usr/bin/env python
# coding=utf8
import grpc
from gRPC_example import #! /usr/bin/env python
# coding=utf8
import grpc
from gRPC_example import hello_pb2_grpc, hello_pb2
def run():
'''
:return:
'''
conn=grpc.insecure_channel('localhost:50052')
client = hello_pb2_grpc.GrpcServiceStub(channel=conn)
skill = hello_pb2.Skill(name="engineer")
request = hello_pb2.HelloRequest(data="xiao gang", skill=skill)
respnse = client.hello(request)
print("received:",respnse.result)
if __name__ == '__main__':
run()
def run():
'''
:return:
'''
conn=grpc.insecure_channel('localhost:50052')
client = hello_pb2_grpc.GrpcServiceStub(channel=conn)
skill = hello_pb2.Skill(name="engineer")
request = hello_pb2.HelloRequest(data="xiao gang", skill=skill)
response = client.hello(request)
print("received:",response.result)
if __name__ == '__main__':
run()
클 라 이언 트 사 이 드 코드 의 실현 은 비교적 간단 합 니 다.먼저 ip 과 포트 번 호 를 정의 한 다음 에 HelloRequest 데이터 구 조 를 정의 하고 hello 를 원 격 으로 호출 하면 됩 니 다.강조해 야 할 것 은 클 라 이언 트 와 서버 는 반드시 import 와 같은 proto 파일 을 컴 파일 하여 생 성 된 hellopb2_grpc, hello_pb2 모듈 은 서버 와 클 라 이언 트 가 사용 하 는 언어 가 다 르 더 라 도 grpc 인터페이스 규범 이 일치 하 는 표현 입 니 다.7.호출 테스트
서버 를 실행 하 는 코드 를 먼저 시작 하고 클 라 이언 트 를 실행 하 는 코드 를 시작 하면 됩 니 다.
8.gRPC 의 사용 총화
인터페이스 문 서 를 정의 하 다.
도구 생 성 서버/클 라 이언 트 코드
서버 보충 업무 코드
클 라 이언 트 가 gRPC 연결 을 구축 한 후 자동 으로 생 성 된 코드 호출 함 수 를 사용 합 니 다컴 파일,운영
이상 은 Python 으로 gRPC 서 비 스 를 어떻게 구축 하 는 지 에 대한 상세 한 내용 입 니 다.Python 으로 gRPC 서 비 스 를 구축 하 는 것 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.