我目前正在遵循 grpc 中的一些快速入门教程,添加一些数据库连接,显然每个请求都创建一个数据库连接并不是最佳的
def connection():
conn = psycopg2.connect(
user="postgres", password="some_password", database="some_db")
return conn
class LeagueGameManager(start_pb2_grpc.GameManagerServicer):
async def CreateLGGame(self, request, context):
try:
conn = connection()
cursor = conn.cursor()
cursor.execute("some sql statement")
conn.commit()
cursor.close()
conn.close()
except OperationalError as e:
context.set_details(e)
context.set_code(grpc.StatusCode.INTERNAL)
cursor.close()
conn.close()
return
return start_pb2.GameReply(json_response=json.dumps(new_row[0]))
async def serve():
server = grpc.aio.server()
start_pb2_grpc.add_GameManagerServicer_to_server(
LeagueGameManager(), server)
listen_addr = '[::]:50051'
server.add_insecure_port(listen_addr)
logging.info("Starting server on %s", listen_addr)
await server.start()
await server.wait_for_termination()
Run Code Online (Sandbox Code Playgroud)
管理上述数据库连接的最佳方式是什么?
小智 9
我知道我有点晚了,但由于 python 中的 gRPC 没有很好的文档记录,我想帮助未来的访问者。我最近一直在为 gRPC 苦苦挣扎。对我来说,持续连接到数据库的最简单方法是在 Service 类的构造函数中连接到它。就我而言,我连接到 MongoDb,它应该如下所示:
class MyServiceClass(MyServiceClass_pb2_grpc.MyServiceClassServicer):
def __init__(self) -> None:
super().__init__()
self.client = pymongo.MongoClient(CONNSTRING) # Connection to Mongo database
self.client.server_info()
async def get_info(self, request, context):
response_info = MyScript(request.code).get_something() # Call
return MyServiceClasse_pb2.InfoResponse(info= response_info)
async def serve():
server = grpc.aio.server()
start_pb2_grpc.add_MyServiceClass_to_server(
MyServiceClass(), server)
listen_addr = '[::]:50051'
server.add_insecure_port(listen_addr)
logging.info("Starting server on %s", listen_addr)
await server.start()
await server.wait_for_termination()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3829 次 |
| 最近记录: |