ホームページ  >  記事  >  バックエンド開発  >  golang は Python にどのように役立ちますか?

golang は Python にどのように役立ちますか?

王林
王林オリジナル
2023-05-15 12:03:10537ブラウズ

コンピュータサイエンスの発展と技術の継続的な進歩に伴い、さまざまなプログラミング言語も登場しています。中でも Python は、習得が簡単で強力かつ幅広く応用できる高水準プログラミング言語であり、多くのプログラマーの間で非常に人気があります。ただし、ビジネス シナリオの変化に伴い、Python では不十分な場合もあるようです。現時点では、Go 言語を使用して Python に接続することは非常に良い選択です。

Go 言語は Google で生まれ、同時実行性と高速コンパイルを重視したプログラミング言語です。対照的に、Python の問題点の 1 つは、大量の同時実行を処理するとパフォーマンスが低下することです。 Go 言語は本質的に同時実行性をサポートしており、この状況にうまく対処できます。したがって、高度な同時処理が必要な一部のシナリオでは、Go 言語を使用して Python とインターフェイスすることで、システムの安定性と負荷容量をある程度向上させることができます。

具体的には、Go 言語には Python を支援する以下の利点があります:

  1. 高パフォーマンス: Go 言語はネイティブ コルーチン (ゴルーチン) と効率的なスレッド スケジューリング メソッドを使用して、同時リクエストをより効率的に処理します。高い同時実行性のサポートを必要とする一部のシナリオでは、Python のパフォーマンスは低下しますが、Go 言語を使用するとシステム全体のパフォーマンスを向上させることができます。
  2. 組み込みの Web フレームワーク: Go 言語には独自の Web フレームワークと http パッケージが付属しており、Web サービスを迅速に構築し、高い同時実行性と高性能をサポートできます。 Python の Web フレームワークも非常に機能豊富ですが、同時実行性が高いシナリオでは手動の構成と最適化が必要であり、これは比較的面倒です。
  3. クロスプラットフォーム: Go 言語は実行可能ファイルを生成でき、クロスプラットフォーム展開をサポートしているため、展開コストと運用保守コストが削減され、システム全体がより柔軟になります。
  4. 学習が簡単: Go 言語は構文がシンプルで、学習曲線が緩やかです。 Python と 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 つの演算をサポートしています。

手順は次のとおりです。

  1. 最初に、リクエストとレスポンスの 2 つのメッセージを含む protobuf ファイル (calculator.proto) を定義する必要があります。
syntax = "proto3";

package calculator;

message Request {
  int32 number1 = 1;
  int32 number2 = 2;
  string operation = 3;
}

message Response {
  int32 result = 1;
}
  1. Go 言語と Python 用の ProtoBuf コードを生成します。
$ protoc calculator.proto --go_out=./go/ --python_out=./python/

生成されたコードは、go ディレクトリと python ディレクトリにそれぞれ保存されます。

  1. Go 言語のサーバー側 (calculator.go) を作成します。
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)
    }
}
  1. Python クライアント (client.py) を作成します。
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()
  1. Go 言語サーバーを起動します。
$ go run calculator.go
  1. Python でクライアントを実行し、数値と演算子を入力すると、計算結果が表示されます。
$ 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。