gpt4 book ai didi

python - 你如何在 grpc 中管理数据库连接?

转载 作者:行者123 更新时间:2023-12-05 01:09:57 26 4
gpt4 key购买 nike

我目前正在关注 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()

管理上述数据库连接的最佳方式是什么?

最佳答案

我知道我来晚了,但由于 python 中的 gRPC 没有很好的文档记录,我想帮助 future 的访问者。我最近一直在与 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()

关于python - 你如何在 grpc 中管理数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64729404/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com