У меня есть код 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- при запуске того же кода без тяжелых вычислений ЦП я не получаю ошибок.
- Я не могу запустить Redis на другая машина.
- Я использую последнюю доступную версию Redis (7.0.11) на centos7.8 и python3.8.10
Подробнее здесь: https://stackoverflow.com/questions/761 ... nvironment