gRPC에서 프로토콜 버퍼를 사용하고 있습니다. 내 .proto 파일이gRPC의 프로토콜 버퍼가 큰 부동 소수점 숫자를 저장할 수 없습니다 - 무엇을해야합니까?
syntax = "proto3";
option java_multiple_files = true;
option objc_class_prefix = "DRPC";
package my_rpc;
service RPCData {
// Sends a cycle of data
rpc RunRequest (CycleData) returns (OutputScores) {}
}
message CycleData {
repeated float timestamps = 1;
repeated float values = 2;
}
같이해야하지만 시스템 내 값으로 절단하는 것 같다
>>> dtw_rpc_pb2.CycleData(timestamps=[1501545616.742662], values=[5])
timestamps: 1501545600.0
values: 5.0
을 나는 정확하게 그 큰 값 표현 할 수없는 것 같아요 :
>>> dtw_rpc_pb2.CycleData(timestamps=[16.742662], values=[5])
timestamps: 16.74266242980957
values: 5.0
>>> dtw_rpc_pb2.CycleData(timestamps=[45616.742662], values=[5])
timestamps: 45616.7421875
values: 5.0
>>> dtw_rpc_pb2.CycleData(timestamps=[1545616.742662], values=[5])
timestamps: 1545616.75
values: 5.0
>>> dtw_rpc_pb2.CycleData(timestamps=[1501545616.742662], values=[5])
timestamps: 1501545600.0
values: 5.0
을
어떻게해야합니까?
정보 주셔서 감사합니다. 당신은 정교 할 수 있습니까? Python float가 C++ float보다 많은 바이트로 인코딩 되었습니까? (나는 둘 다 32 바이트로 인코딩되어 있다고 생각하니?) "cpp"는 무엇입니까? 그것은 C++ 컴파일러입니까? – Make42
파이썬에는 C 스타일의 부동 소수점이 없으며 C 스타일의 이중 만 있습니다. 파이썬의 빌트인 float 형은 배정 밀도를 가진다. 예 "cpp"에 의해 나는 C++을 의미합니다. "--cpp_implementation"은 누군가가 C++ 구현을 사용하고자한다면 파이썬 protobuf에 사용 된 플래그입니다 : https://github.com/google/protobuf/blob/master/python/README.md gRPC가 사용하고 있다고 생각합니다. cpp_implementation –
@ Make42 gRPC Python pip 패키지는 protobuf pip 패키지를 종속성으로 나열합니다. pip 설치하는 플랫폼에 따라 Python protobuf 패키지는 두 개의 기본 코드 경로 중 하나를로드합니다. 하나는 C++로 작성된 Python 확장자를 사용하고 다른 하나는 기본적으로 Python으로 작성된 것입니다. gRPC 자체는 기본 설치를 사용하며 만족스럽지 만 발생하는 경미한 동작 차이가있을 수 있습니다. PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION = python 환경 변수가있어 C++ 확장을 사용할 수있을 때에도 순수한 파이썬 코드 경로를 강제 적용합니다. –