我有一堆同时在服务器上运行的进程,需要对mysql数据库运行查询。
我想创建一个我的进程将连接到的TCP服务器,并以JSON对象的形式发送查询请求并获取查询结果(以及JSON)。
基本上,我正在研究在多个进程之间使用(“共享”)数据库连接池,以提高性能/减少数据库连接的数量。
到目前为止,我已经修改了asyncio“回显服务器”示例,并且能够在客户端和服务器之间发送/接收JSON有效负载。
现在,我想在TCP服务器上设置一个连接池,并在收到请求时使用它。
import asyncio
import json
import aiomysql
async def handle_request(reader, writer):
data = b''
while True:
data += await reader.read(10)
reader.feed_eof()
if reader.at_eof():
break
message = data.decode()
addr = writer.get_extra_info('peername')
print(f"Received {message} from {addr}")
order = json.loads(message)
print(f"{order['database']}, {order['query']}")
#<? Execute query and retrieve result ?>
result = {}
result['success'] = 'yes'
result['data'] = 'query result'
response = json.dumps(result)
print(f"Sending: {response}")
writer.write(response.encode())
await writer.drain()
print("Close the client socket")
writer.close()
loop = asyncio.get_event_loop()
coro = asyncio.start_server(handle_request, '127.0.0.1', 8888, loop=loop)
server = loop.run_until_complete(coro)
# Serve requests until Ctrl+C is pressed
print('Serving on {}'.format(server.sockets[0].getsockname()))
try:
loop.run_forever()
except KeyboardInterrupt:
pass
# Close the server
server.close()
loop.run_until_complete(server.wait_closed())
loop.close()
如何在这种情况下正确设置连接池?我如何称呼执行来自handle_request的查询?我以为aiomysql是正确的模块,但是我不确定如何正确使用它。