#python #windows #concurrency #race-condition
Вопрос:
У меня есть скрипт, состоящий из 2 процессов для загрузки и фильтрации/сохранения ответов:
- Процесс A: использует ThreadPoolExecutor с 4 потоками для загрузки более 100 МБ файлов
- Процесс B: сидит в a
while
и взаимодействует с процессом A через очередь
Проблема, с которой я сталкиваюсь, заключается в том, что, как только процесс B удаляет элемент из очереди, он начинает фильтровать ответы фиксированной ширины и записывать в файл, но прежде чем он сможет записать в файл, процесс A берет управление на себя. Что я имею в виду под «берет под контроль»? Ну, местоположение, в которое процесс B записывает ответы, находится на сетевом диске, который находится в том же сетевом канале, что и загрузка, происходящая в процессе A; что еще хуже, пропускная способность ограничена 100 Мбит / с (не Мбит / с).
Конечным результатом является то, что процесс А, похоже, получает «сетевой приоритет», когда один из потоков исполнителя начинает получать ответы (рассматриваемая веб-служба не разрешает потоковую передачу ответов, поэтому требуется загрузка).
Можно ли предотвратить это при загрузке и записи в файл по одной и той же сети, не возвращаясь к синхронной обработке?