コンピュータサイエンスの発展と技術の継続的な進歩に伴い、さまざまなプログラミング言語も登場しています。中でも Python は、習得が簡単で強力かつ幅広く応用できる高水準プログラミング言語であり、多くのプログラマーの間で非常に人気があります。ただし、ビジネス シナリオの変化に伴い、Python では不十分な場合もあるようです。現時点では、Go 言語を使用して Python に接続することは非常に良い選択です。
Go 言語は Google で生まれ、同時実行性と高速コンパイルを重視したプログラミング言語です。対照的に、Python の問題点の 1 つは、大量の同時実行を処理するとパフォーマンスが低下することです。 Go 言語は本質的に同時実行性をサポートしており、この状況にうまく対処できます。したがって、高度な同時処理が必要な一部のシナリオでは、Go 言語を使用して Python とインターフェイスすることで、システムの安定性と負荷容量をある程度向上させることができます。
具体的には、Go 言語には Python を支援する以下の利点があります:
上記の利点に基づいて、Go 言語と Python のドッキングにより、開発者は 2 つの言語の利点をより適切に活用し、効率的で安定したシステムを迅速に開発できます。以下に例を示し、具体的な実装方法を説明します。
まず、Go 言語と Python の間の通信方法を決定する必要があります。一般的には、RPC、メッセージキュー、共有データベースなど多くの方式があります。ここでは通信方式としてRPCを用いて説明します。
gRPCを利用すると、Go言語とPython間のリモート呼び出しが実現できます。 gRPC は、Google が開発した高性能の汎用オープンソース RPC フレームワークで、複数の言語 (Go、Python、Java など) と複数のプラットフォームをサポートしています。通信に gRPC を使用する利点は、最下位層での送信に HTTP/2 プロトコルを使用するため、送信速度が速く、セキュリティが高いことです。同時に、gRPC はデータ交換形式として ProtoBuf をサポートしており、データ パケット サイズとネットワーク帯域幅の圧力を効果的に削減できます。
次に、簡単な例を使用して、Go 言語と Python 間の gRPC 通信の具体的な実装を説明します。 Go 言語を使用してサーバーを作成し、Python を使用してクライアントを作成する、単純な計算機プログラムを実装する必要があるとします。この電卓は、加算、減算、乗算、除算の 4 つの演算をサポートしています。
手順は次のとおりです。
syntax = "proto3"; package calculator; message Request { int32 number1 = 1; int32 number2 = 2; string operation = 3; } message Response { int32 result = 1; }
$ protoc calculator.proto --go_out=./go/ --python_out=./python/
生成されたコードは、go ディレクトリと python ディレクトリにそれぞれ保存されます。
package main import ( "context" "log" "net" "google.golang.org/grpc" pb "github.com/username/calculator/go/proto" ) const ( port = ":50051" ) type server struct { pb.UnimplementedCalculatorServer } func (s *server) Calculate(ctx context.Context, in *pb.Request) (*pb.Response, error) { var result int32 switch in.Operation { case "add": result = in.Number1 + in.Number2 case "sub": result = in.Number1 - in.Number2 case "mul": result = in.Number1 * in.Number2 case "div": result = in.Number1 / in.Number2 default: return nil, fmt.Errorf("Invalid operation:%s", in.Operation) } return &pb.Response{Result: result}, nil } func main() { lis, err := net.Listen("tcp", port) if err != nil { log.Fatalf("failed to listen: %v", err) } s := grpc.NewServer() pb.RegisterCalculatorServer(s, &server{}) if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } }
import grpc import calculator_pb2 import calculator_pb2_grpc def run(): with grpc.insecure_channel('localhost:50051') as channel: stub = calculator_pb2_grpc.CalculatorStub(channel) number1 = int(input("Enter number1:")) number2 = int(input("Enter number2:")) operation = input("Enter operation (add/sub/mul/div):") response = stub.Calculate(calculator_pb2.Request(number1=number1, number2=number2, operation=operation)) print(response.result) if __name__ == '__main__': run()
$ go run calculator.go
$ python client.py Enter number1: 10 Enter number2: 3 Enter operation (add/sub/mul/div): div 3
上記のコードは、gRPC を介した Go 言語と Python 間の通信の簡単な例を実装しています。読者の中には、「ほとんどの Python アプリケーションは IO 集中型であるのに、なぜ Go 言語に接続する必要があるのですか?」と疑問に思う人もいるかもしれません。実際、このドッキング方法は、CPU を大量に使用するアプリケーション シナリオに適しているだけではありません。実際のアプリケーションでは多くの Python ビジネス ロジックが存在することが多いため、アクティブ アクセスが必要な一部のシナリオでは、Go 言語と Python を組み合わせることで、Python ビジネス ロジックの柔軟性を満たすだけでなく、高い同時実行性も実現できます。性能要件。
つまり、Go 言語と Python をドッキングに使用すると、2 つの言語の利点が最大限に発揮され、システムの信頼性とパフォーマンスが向上します。将来の開発プロセスでは、さまざまなビジネスニーズによりよく対応できるように、異なる言語間のコラボレーションと接続にさらに注意を払い、複数のプログラミング言語を習得し、言語間のコラボレーションの可能性を探求する必要があります。
以上がgolang は Python にどのように役立ちますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。