@LakeForest

/bin/bash: Too many open files in system. Если не сделать ребут сервера, пройдет через какой-то время? Как избежать?

Понимаю свои ошибки, но не могу найти метод избежать зависания сервера.
Запускал скрипт обработки файлов через питон:
Пример так:
import subprocess
for i in files:
   subprocess.run(<скрипт>)

Второй раз сервер подвис с ошибкой
Too many open files in system.
.
В первый раз ребут сделали, но сейчас ночь и стыдно так косячить. Подскажите, как правильно мультипроцесс запускать или как ограничивать?
Через сколько сборщик мусора позакрывает файлы? Закроет же или ребут запрашивать?
Как писать, чтобы не повторять эту ошибку?
Если получится войти на сервер, что написать, чтобы зачистить свои процессы?
  • Вопрос задан
  • 195 просмотров
Решения вопроса 1
Alexeytur
@Alexeytur
Ограничивать число дочерних процессов

max_child_processes = 100
child_processes = []
for i, row in df.iterrows():
    while len(child_processes ) >= max_child_processes:
        sleep(0.1)
        child_processes = [p for p in child_processes if p.poll() is None]
    path = row.path
    subp = subprocess.Popen(f"echo {password} | sudo -S ./recog_wav.sh {path}",
                    stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
    child_processes.appen(subp)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы