У меня есть класс, который выполняет многопоточное копирование и хэш контрольной суммы MD5.Общий поток для одной копии файла выглядит следующим образом:
- загрузка буфера чтения, запуск цикла
- копирование буфера чтения в буфер назначения
- startновый поток для чтения следующего блока данных
- начало нового потока для хеширования байтов в целевом буфере
- запись целевого буфера в выходной файл
- конеццикл, когда запись в выходной файл составляла ноль байтов или меньше размера буфера
Недавно я переключил поток чтения с threading.Thread () на ThreadPool (процессы= 1) .apply_async (), потому что было проще выполнить get () в пуле чтения, затем записать поток чтения в глобальную переменную и выполнить join () для него после проверки, является ли это isAlive ().
Вот моя проблема!После того, как я внес это изменение, код работал нормально при тестировании из окна терминала в OS X, но как только я развернул его в докер-контейнере с Ubuntu, это вызвало огромную проблему с производительностью.При копировании папки, полной файлов, она поместит в нее пару сотен файлов и просто перестанет работать.Устранение неполадок в коде с помощью набора операторов печати Я сузил его до цикла, описанного выше, и я знал единственную вещь, которую я недавно изменил в этом цикле по мере чтения потока файла.Как только я переключил это обратно, оно снова заработало нормально.
Есть ли какое-то ограничение на число процессов, которые может получить контейнер докеров?У кого-нибудь есть идеи, на что я натолкнулся?Я исправил свою проблему на данный момент, но я хотел бы знать, в чем проблема, поэтому я не буду делать это снова.