2015-07-27 3 views
2

Python предоставляет 4 different synchronizing mechanisms в потоковом модуле: событие/состояние/замок (RLock)/семафор.Когда использовать событие/условие/блокировку/семафор в потоковом модуле python?

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

Можно ли использовать их взаимозаменяемо? Или некоторые из них «более высокого уровня», используя других в качестве строительных блоков? Если да, то какие из них построены?

Было бы здорово, если бы кто-нибудь мог проиллюстрировать некоторые примеры.

+2

Я думаю, что этот вопрос немного широк, но чтобы ответить на его часть: 'Условие' построено поверх' Lock', а 'Event' и' Semaphore' построены поверх 'Condition'. – dano

ответ

3

This article, вероятно, содержит всю необходимую информацию. Вопрос действительно очень широк, но позволь мне объяснить, как я использую каждый в качестве примера:

  1. Event - использовать его, когда вам нужна тема для общения определенного состояния было выполнено таким образом, они могут и работать вместе в синхронизации. Я использую его в основном для процесса инициации двух потоков, где один зависит от другого.

    Пример: У клиента есть менеджер потоков, а его __init__() должен знать, что менеджер выполнен с использованием некоторых атрибутов, прежде чем он сможет двигаться дальше.

  2. Lock/RLock - Используйте его, когда вы работаете с общим ресурсом, и вы хотите удостовериться, что ни одна другая нить не читает/не пишет. Хотя я бы сказал, что при блокировке перед письмом является обязательным, блокировка перед чтением может быть необязательным. Но хорошо убедиться, что, пока вы читаете/пишете, ни один другой поток не модифицирует его одновременно. RLock имеет возможность быть приобретенным несколько раз своим владельцем, а release() должно называться столько же раз acquire() было предназначено для того, чтобы использовать его другой темой, пытаясь ее приобрести.

Я не использовал Condition, что много, и, честно говоря никогда не приходилось использовать Semaphore, поэтому этот ответ имеет номер редактирования и улучшения.

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