При использовании модуля multiprocessing
в Python существует ли способ предотвратить процесс переключения на другой процесс в течение определенного времени?Многопроцессорность Python предотвращает отключение к другим процессам
У меня есть ~ 50 различных дочерних процессов, созданных для извлечения данных из базы данных (каждый процесс = каждая таблица в БД), и после запроса и фильтрации данных я пытаюсь записать вывод в файл excel.
Поскольку все процессы имеют схожие шаги, все они заканчиваются процессом записи в одинаковые моменты времени, и, разумеется, поскольку я пишу в один файл, у меня есть блокировка, которая предотвращает запись нескольких файлов в файл.
Проблема заключается в том, хотя, процесс записи, кажется, очень долго, по сравнению с процессом записи, когда у меня было такое же количество данных, записанных в одном процессе (медленнее, по крайней мере, x10)
Я угадывание одна из причин может заключаться в том, что при записи процессор постоянно переключается на другие процессы, которые все застряли в блокировке мьютекса, только чтобы вернуться к процессу, который является единственным активным. Я предполагаю, что переключение контекста представляет собой значительную трату времени, так как есть много процессов для переключения взад и вперед от
Мне было интересно, есть ли способ заблокировать процесс, который для определенной части кода , не происходит переключение контекста между процессами
Или любые другие предложения по ускорению этого процесса?
В качестве альтернативы вы можете связать дочерние процессы с очередью, из которой родительский читает. Таким образом, вам не нужно выводить на выходе. Интересно, какой путь был бы наиболее эффективным. – NBartley
Хм ... единственное, что я не уверен в этом подходе, - это то, что результат, который создает дочерний процесс, довольно большой, поэтому q.get() нужно вызвать до того, как все данные будут извлечены из дочернего процесса, в котором если дочерний процесс будет продолжать работать, пока все данные не будут переданы в очередь. По крайней мере, это мое понимание. Это не? – markk
Я полагаю, что это зависит от реализации очереди; почему вы предполагаете, что он имеет ограничение по размеру? Использование очереди имеет то преимущество, что дочерний процесс может выйти до того, как родитель прочитает все данные, в отличие от использования стандартного вывода. – shevron