Есть ли любая причина использовать поточную обработку. Заблокируйте по многопроцессорной обработке. Блокировка?

Если проект программного обеспечения поддерживает версию Python, к которому была бэкпортирована многопроцессорная обработка, есть ли любая причина использовать threading.Lock multiprocessing.Lock? Был бы a multiprocessing блокировка не быть ориентированным на многопотоковое исполнение также?

В этом отношении есть ли причина использовать любые примитивы синхронизации от threading это находится также в multiprocessing?

13
задан Jason Baker 30 December 2009 в 14:33
поделиться

3 ответа

Примитив модуля синхронизации потоков легче и быстрее, чем мультипроцессорный, за счет отсутствия работы с общими семафорами и т.д. Если вы используете потоки, используйте блокировки потоков. Процессы должны использовать многопроцессорные блокировки.

.
16
ответ дан 1 December 2019 в 22:57
поделиться

Я бы ожидал, что многопоточные примитивы синхронизации будут достаточно быстрыми, так как они могут легко использовать разделяемую область памяти. Но я полагаю, что для того, чтобы убедиться в этом, придется провести тест на скорость. Также у вас могут быть побочные эффекты, которые совершенно нежелательны (и не указаны в документации).

Например, Блокировка по технологическому процессу вполне может заблокировать все резьбы процесса. А если нет, то снятие блокировки может не разбудить потоки процесса.

Одним словом, если вы хотите, чтобы ваш код работал точно, то вам следует использовать потокосинхронизирующие примитивы, если вы используете потоки, и процессно-синхронизирующие примитивы, если вы используете процессы. В противном случае он может работать только на вашей платформе, или даже только с вашей конкретной версией Python.

.
3
ответ дан 1 December 2019 в 22:57
поделиться

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

Если ваше приложение не порождает новых процессов, требующих синхронизации данных, то многопоточная обработка немного тяжелее, и пакет threading должен быть более подходящим.

.
1
ответ дан 1 December 2019 в 22:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: