xozzslip
@xozzslip
Чекни мой канал о кодинге https://bit.ly/2LNBAL8

Как реализовать блокировку ресурса для всех потоков, кроме одного?

Есть ресурс: access_token для vk api. Если больше одного потока отправит запрос с этим access_token'ом, то сервер вернет ошибку о слишком большом количестве запросов в секунду, поэтому нужно организовать синхронное использование этого ресурса.

Есть некие mutex, которые один-в-один решают мою задачу, но как написать собственный такой mutex я, пока, не понимаю. Везде приводят какие-то примеры использования, а как реализовывать центральные методы acquire и release я не понимаю. Хотелось бы поглубже в этом разобраться
  • Вопрос задан
  • 259 просмотров
Решения вопроса 1
Daemon23RUS
@Daemon23RUS
сначала acquire использование токена, и как использование завершено, release
И так в каждом потоке который использует токен.
1й поток выполнивший acquire заблокирует токен, и сразу же продолжит выполнение. Все паралельные запросы остановятся на acquire (возврат из него не произойдет до тех пор, пока 1й поток не вызовет release) когда объект будет освобожден (release) в одном из параллельных потоков произойдет возврат из acquire и поток продолжит выполнение. Остальные потоки останутся в ожидании возврата из acquire, до тех пор пока снова не будет вызван relase. Таким образом буде разделятся ресурс(ваш токен).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Olej
@Olej
инженер, программист, преподаватель
А не нужно ничего реализовывать, нужно брать и использовать готовые примитивы синхронизации ... из модулей thread или threading.
См. например: Python: примеры и тесты, часть 4 - потоки

P.S. Но только имейте в виду, что в Python всё, что касается потоков - это всё очень условно, и реального параллелизма там быть не может (из-за глобальной блокировки).
Детальное обсуждение см. здесь:
Python - параллелизм
Python
Тонкости использования языка Python: Часть 4. Пара...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы