Ошибки подключения Redis в среде с высокой нагрузкой ⇐ Python

Программы на Python
Anonymous
Ошибки подключения Redis в среде с высокой нагрузкой

Сообщение Anonymous »

Я работаю в среде с очень большой нагрузкой.
У меня есть код Python, который запускает пул процессов из 300 процессов на сервере с около 100 процессорами и постоянно запускает процессы. который проверяет Redis на наличие значения, если это значение не существует, он сохраняет его, а если есть, выполняет некоторые тяжелые вычисления. это делается с помощью команды Redis get set.
каждый процесс имеет клиент Redis, который инициализируется только один раз, а затем используется в программе
псевдокод

Код: Выделить всё

import redis
from concurrent.futures import ProcessPoolExecutor

redis: redis.Redis

def init_process():

global redis
redis = redis.Redis(host="127.0.0.1", port=6379, decode_response=True)

def recieved_request(unique_id):
x = redis.getset(unique_id, "hello world")
if x is not None:
heavy_cpu_load()
redis.delete(unique_id)
else:
redis.expire(unique_id, 60)

pool = ProcessPoolExecutor(max_workers=300, initializer=init_process)

def on_new_request():
pool.submit(recieved_request)

при запуске кода с низким трафиком он работает как положено, но при запуске с высоким трафиком возникают следующие ошибки:

Код: Выделить всё

error 99 - connecting to cannot assign requested address

Код: Выделить всё

error while reading from 127.0.0.1:6379: (104, connection is reset by peer)

Код: Выделить всё

connection is closed by server
Я пробовал менять таймаут, чтобы быстро закрывать неактивные соединения, и изменять количество maxconnection на 50000, оба не приводят к каким-либо изменениям в поведение.
  • при запуске того же кода без тяжелых вычислений ЦП я не получаю ошибок.
  • Я не могу запустить Redis на другая машина.
  • Я использую последнюю доступную версию Redis (7.0.11) на centos7.8 и python3.8.10


Подробнее здесь: https://stackoverflow.com/questions/761 ... nvironment

Вернуться в «Python»