Если проект программного обеспечения поддерживает версию Python, к которому была бэкпортирована многопроцессорная обработка, есть ли любая причина использовать threading.Lock
multiprocessing.Lock
? Был бы a multiprocessing
блокировка не быть ориентированным на многопотоковое исполнение также?
В этом отношении есть ли причина использовать любые примитивы синхронизации от threading
это находится также в multiprocessing
?
Примитив модуля синхронизации потоков легче и быстрее, чем мультипроцессорный, за счет отсутствия работы с общими семафорами и т.д. Если вы используете потоки, используйте блокировки потоков. Процессы должны использовать многопроцессорные блокировки.
.Я бы ожидал, что многопоточные примитивы синхронизации будут достаточно быстрыми, так как они могут легко использовать разделяемую область памяти. Но я полагаю, что для того, чтобы убедиться в этом, придется провести тест на скорость. Также у вас могут быть побочные эффекты, которые совершенно нежелательны (и не указаны в документации).
Например, Блокировка по технологическому процессу вполне может заблокировать все резьбы процесса. А если нет, то снятие блокировки может не разбудить потоки процесса.
Одним словом, если вы хотите, чтобы ваш код работал точно, то вам следует использовать потокосинхронизирующие примитивы, если вы используете потоки, и процессно-синхронизирующие примитивы, если вы используете процессы. В противном случае он может работать только на вашей платформе, или даже только с вашей конкретной версией Python.
. многопроцессорные
и многопоточные
пакеты имеют несколько иные цели, хотя и те и другие имеют параллельное назначение. threading
координирует потоки в пределах одного процесса, в то время как многопоточная обработка
предоставляет потокоподобный интерфейс для координации нескольких процессов.
Если ваше приложение не порождает новых процессов, требующих синхронизации данных, то многопоточная обработка
немного тяжелее, и пакет threading
должен быть более подходящим.