Улучшение скорости записи в Python многопроцессорном коде - PullRequest
0 голосов
/ 08 января 2020

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

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

Я пытаюсь выбрать лучший вариант из двух подходов, которые я рассматриваю. Первый подход заключается в том, чтобы рабочие потоки выполняли извлечение данных с веб-сервера и передавали результаты в основной поток, где основной поток выполнял бы запись на диск. Таким образом, я могу позволить потокам продолжать заполнять буфер, пока основной поток выполняет запись без каких-либо задержек при чтении с веб-сервера.

Другой подход - позволить каждому потоку поддерживать буфер и когда этот буфер Заполните, запишите данные в файл (я могу объединить эти файлы позже, чтобы сформировать один файл позже). Меня беспокоит такой подход: будет ли конкуренция между потоками за дисковый ввод-вывод слишком большой, поскольку несколько потоков могут начать запись одновременно.

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

...