LoginSignup
0

More than 3 years have passed since last update.

Python の gRPC で Redis のデータを作成 (Create)

Last updated at Posted at 2020-02-08

設定ファイル、サーバープログラム、クライアントプログラムの3つが必要です。

設定ファイル

redis_create.proto

syntax = "proto3";

package redis_create;

service Greeter {
    rpc RedisCreate (RedisRequest) returns (RedisReply) {}
}

message RedisRequest {
    string key = 1;
    string str_json = 2;
}

message RedisReply {
    string key = 1;
}

サーバープログラム

redis_create_server.py
#! /usr/bin/python
#
#   redis_create_server.py
#
#                   Feb/08/2020
# --------------------------------------------------------------
import sys
import redis
from concurrent import futures
import logging

import grpc

import redis_create_pb2
import redis_create_pb2_grpc

# --------------------------------------------------------------
def redis_create_proc(key_in,str_json):
    rr = redis.Redis(host='localhost', port=6379, db=0)
#
    rr.set(key_in, str_json)
#
    return str_json
# --------------------------------------------------------------
class Greeter(redis_create_pb2_grpc.GreeterServicer):

    def RedisCreate(self, request, context):
        sys.stderr.write("*** RedisRead ***\n")
        sys.stderr.write("*** key = %s ***\n" % request.key)
        sys.stderr.write("*** str_json = %s ***\n" % request.str_json)
        redis_create_proc(request.key,request.str_json)
        return redis_create_pb2.RedisReply(key=request.key)

# --------------------------------------------------------------
def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    redis_create_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    server.wait_for_termination()

# --------------------------------------------------------------
if __name__ == '__main__':
    logging.basicConfig()
    serve()
# --------------------------------------------------------------

クライアントプログラム

redis_create_client.py
#! /usr/bin/python
#
#   redis_create_client.py
#
#                   Feb/08/2020
#
# --------------------------------------------------------------
from __future__ import print_function
import logging
import json
import grpc
import sys

import redis_create_pb2
import redis_create_pb2_grpc

# --------------------------------------------------------------
def run():
    unit_aa = {}
    key_in = sys.argv[1]
    unit_aa['name'] = sys.argv[2]
    unit_aa['population'] = sys.argv[3]
    unit_aa['date_mod'] = sys.argv[4]
#
    str_json_in = json.dumps(unit_aa)
#
    with grpc.insecure_channel('localhost:50051') as channel:
        stub = redis_create_pb2_grpc.GreeterStub(channel)
        response = stub.RedisCreate(redis_create_pb2.RedisRequest \
            (key=key_in,str_json = str_json_in))
        print("Greeter client received aa: " + response.key)
#
# --------------------------------------------------------------
if __name__ == '__main__':
    logging.basicConfig()
    run()
# --------------------------------------------------------------

gRPC のコードを作成します。

python -m grpc_tools.protoc -I. \
    --python_out=. \
    --grpc_python_out=. \
    ./redis_create.proto

サーバープログラムの起動

./redis_create_server.py

クライアントプログラムの実行

$ ./redis_create_client.py t0931 那須烏山 42935 2003-8-9
Greeter client received aa: t0931

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0