Блокировка только входа / выхода из очереди в Python - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть система, которая содержит -

Queue & 2 types of instances -
                             1.push to the Queue
                             2.pull from Queue

Я хочу одновременно выдвигать и извлекать из очереди, но я не уверен (я не нашел в документации и не нашел реализацию) если очередь защищает от коллизий доступа к одной и той же памяти

for example:
    There is zero elements in the Queue -> I push and then I pull in the same time

Мой вопрос: если Очередь не защищает ее, есть ли способ заблокировать только вход или выход из Очереди?

1 Ответ

1 голос
/ 02 апреля 2019

Класс Queue знает о параллельном доступе и обрабатывает его правильно.Если вы извлекаете из очереди (queue.get()) и в ней ничего нет, то вызов будет заблокирован или истечет время ожидания.Если вы нажмете на очередь (queue.put()), то это будет правильно обработано, и вызов будет блокироваться или истечет время ожидания только в том случае, если вы установили максимальный размер для очереди, и она заполнена.

Документация гласит:

Модуль queue реализует многопользовательские, многопользовательские очереди.Это особенно полезно в многопоточном программировании, когда необходимо безопасно обмениваться информацией между несколькими потоками.Класс Queue в этом модуле реализует всю необходимую семантику блокировки.Это зависит от наличия поддержки потоков в Python;см. модуль threading.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...