Каковы наилучшие практики или решения для использования как многопроцессорных, так и пользовательских потоков в одном и том же приложении python в Linux в отношении проблемы 6721, Locks в стандартной библиотеке python следует дезинфицировать в fork?
Зачем мне обоим? Я использую дочерние процессы для выполнения сложных вычислений, которые приводят к слишком большим результатам структуры данных для возврата через очередь - скорее, они должны быть немедленно сохранены на диске. Эффективно было, чтобы каждый из этих дочерних процессов контролировался отдельным потоком, так что, когда он закончен, поток может обрабатывать IO чтения больших (например, нескольких ГБ) данных обратно в процесс, где результат был необходим для дальнейших вычислений в сочетание с результатами других дочерних процессов. Детские процессы периодически зависали, и я просто (после большого удара головой) обнаружил, что "вызвано" с помощью модуля регистрации. Другие документировали проблему здесь:
https://twiki.cern.ch/twiki/bin/view/Main/PythonLoggingThreadingMultiprocessingIntermixedStudy
который указывает на эту, по-видимому, нерешенную проблему с python: Замки в стандартной библиотеке python должны быть дезинфицированы на fork; http://bugs.python.org/issue6721
Взволнованный тем сложностью, с которой я следил, я ответил:
Есть ли причины не смешивать модуль Multiprocessing и Threading в Python
с довольно бесполезным предложением "Будьте осторожны" и ссылки на вышесказанное.
Но длительная дискуссия re: Issue 6721 предполагает, что это "ошибка" для использования как многопроцессорных (или os.fork), так и пользовательских потоков в одном приложении. Учитывая мое ограниченное понимание проблемы, я нахожу слишком много разногласий в обсуждении, чтобы заключить, что такое обход или стратегии для использования как многопроцессорности, так и потоковой обработки в одном приложении. Моя непосредственная проблема была решена путем отключения ведения журнала, но я создаю небольшую часть других (явных) блокировок как в родительском, так и в дочернем процессах, и подозреваю, что я настраиваю себя на дополнительные прерывистые взаимоблокировки.
Можете ли вы дать практические рекомендации по предотвращению блокировок при использовании блокировок и/или модуля регистрации при использовании потоков и многопроцессорности в приложении python (2,7,3,2,3,3)?