2009-12-30 3 views
9

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

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

ответ

12

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

+2

Не говоря уже о том, что «многопроцессорность» не так переносима, как 'threading' is;) –

+1

Почему я должен быть таким :) – jnoller

2

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

Например, блокировка процесса может полностью блокировать все потоки процесса. И если это не так, освобождение блокировки может не разбудить потоки процесса.

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

0

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

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

+0

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

Смежные вопросы