Проблемы с ThreadPool.apply_async () внутри контейнера Docker - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть класс, который выполняет многопоточное копирование и хэш контрольной суммы MD5.Общий поток для одной копии файла выглядит следующим образом:

  • загрузка буфера чтения, запуск цикла
    • копирование буфера чтения в буфер назначения
    • startновый поток для чтения следующего блока данных
    • начало нового потока для хеширования байтов в целевом буфере
    • запись целевого буфера в выходной файл
    • конеццикл, когда запись в выходной файл составляла ноль байтов или меньше размера буфера

Недавно я переключил поток чтения с threading.Thread () на ThreadPool (процессы= 1) .apply_async (), потому что было проще выполнить get () в пуле чтения, затем записать поток чтения в глобальную переменную и выполнить join () для него после проверки, является ли это isAlive ().

Вот моя проблема!После того, как я внес это изменение, код работал нормально при тестировании из окна терминала в OS X, но как только я развернул его в докер-контейнере с Ubuntu, это вызвало огромную проблему с производительностью.При копировании папки, полной файлов, она поместит в нее пару сотен файлов и просто перестанет работать.Устранение неполадок в коде с помощью набора операторов печати Я сузил его до цикла, описанного выше, и я знал единственную вещь, которую я недавно изменил в этом цикле по мере чтения потока файла.Как только я переключил это обратно, оно снова заработало нормально.

Есть ли какое-то ограничение на число процессов, которые может получить контейнер докеров?У кого-нибудь есть идеи, на что я натолкнулся?Я исправил свою проблему на данный момент, но я хотел бы знать, в чем проблема, поэтому я не буду делать это снова.

...