У меня есть несколько процессов, работающих одновременно на сервере, которым необходимо выполнять запросы к базе данных 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? Я подумал, что aio mysql будет правильным модулем, но я не уверен, как его правильно использовать.