Рубрики
Без рубрики

Реализация блокировки Python в различных обстоятельствах

В этой статье мы рассмотрим python lock. Мы также рассмотрим необходимость блокировки python на различных примерах в различных обстоятельствах.

Автор оригинала: Team Python Pool.

Реализация блокировки Python в различных обстоятельствах

Привет гики и добро пожаловать в этой статье мы рассмотрим python lock. Наряду с этим мы рассмотрим необходимость блокировки python и способы ее реализации. Чтобы достичь всего этого, мы рассмотрим несколько примеров.

Когда один поток пытается одновременно изменить общий ресурс, другой поток изменяет его, что приводит к беспорядочному выходу. Это состояние называется состоянием гонки, и это одна из главных проблем, с которой сталкиваются многие программисты. Чтобы избежать этого, нам нужно синхронизировать протекторы. Для этого мы можем использовать блокировку, присутствующую в модуле Threading Python.

По мере продвижения вперед в этой статье мы рассмотрим использование программы блокировки. Кроме того, мы рассмотрим различные состояния замка.

Объект блокировки: Многопоточность Python

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

  • Locked
  • Разблокирован

Чтобы достичь заблокированного состояния, мы используем метод acquire (). В то время как для достижения разблокированного состояния

Мы можем использовать метод release (). Как только состояние блокировки получено, все остальные попытки доступа к потоку блокируются. Следовательно, этим мы исключаем любую возможность беспорядочного вывода.

Как реализовать блокировку Python

В этом разделе мы рассмотрим, как реализовать блокировку. Для этого рассмотрим пример заявления.

Предположим, Вы находитесь в библиотеке, где есть стопка из 10 книг. Библиотекарь применяет правило, что другой студент выбирает его, когда один студент держит книгу. По порядку номер стека остается неизменным. Но с тех пор библиотекарь не обращает на это пристального внимания. Итак, ученики нарушают этот порядок, и теперь последовательность нарушена. Теперь любое число может держать книгу одновременно, в то время как то же самое может держать ее. Но все же номер стека остается 10.

Чтобы решить эту проблему, нам нужно создать два разных потока. Одна нить отслеживает взятые книги, а другая-нет.

Давайте посмотрим на первый код:

import threading
def add_book():
    global stack
    for i in range(100000):
        + 1
def take_book():
    global stack
    for i in range(100000):
        - 1.Thread(target, args = ()).Thread(target, args = ())
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print(stack)
-54334

Здесь мы видим, что получаем ошибку. Давайте воспользуемся рассмотренными методами, чтобы избавиться от этой ошибки.

import threading.Lock()
def add_book():
    global stack
    for i in range(100000):
        lock.acquire()
        + 1
        lock.release()
def take_book():
    global stack
    for i in range(100000):
        lock.acquire()
        - 1
        lock.release().Thread(target, args = ()).Thread(target, args = ())
thread1.start()
thread2.start()
thread1.join()
thread2.join()
print(stack)
10

Здесь мы видим, что получаем правильный ответ. Для этого мы должны внести некоторые незначительные изменения по сравнению с 1-м кодом. Сначала мы импортировали модуль нарезания резьбы. Затем мы определили наше значение стека. После чего мы определили замок. Затем мы написали код для добавления и извлечения книги из стека. Кроме того, мы использовали метод приобретения и выпуска здесь. Наконец, мы использовали оператор print для получения выходных данных.

Многопроцессорные блокировки и их использование для предотвращения гонок данных

Мультипроцессор-это встроенный модуль python. Это помогает нам, предотвращая печать нескольких файлов на стандартный вывод. Кроме того, это помогает нам, предотвращая гонки данных, что означает, что при множественном href=”https://simple.wikipedia.org/wiki/Thread_(computer_science)#:~:text=A%20thread%20in%20computer%20science,pseudo%2Dsimultaneously)%20running%20tasks.&text=Threads%20are%20lightweight%2C%20in%20terms,consume%2C%20as%20compared%20with%20processes.”>threads может получить доступ к общим данным. И все это одновременно пытаются изменить. Кроме того, он также предотвращает любое повреждение структуры данных. href=”https://simple.wikipedia.org/wiki/Thread_(computer_science)#:~:text=A%20thread%20in%20computer%20science,pseudo%2Dsimultaneously)%20running%20tasks.&text=Threads%20are%20lightweight%2C%20in%20terms,consume%2C%20as%20compared%20with%20processes.”>threads может получить доступ к общим данным. И все это одновременно пытаются изменить. Кроме того, он также предотвращает любое повреждение структуры данных.

import multiprocessing

def worker(lock):
    lock.acquire()
    print("Multi processing Lock") 
    lock.release()
.Lock()
.Process(
   , args=[lock])
process.start()

lock.acquire()

lock.release()
Multi processing Lock

Здесь вы можете увидеть простой пример, связанный с многопроцессорной блокировкой.

Разница между замком и замком

Как мы уже обсуждали, блокировка в этой статье. Мы понимаем, что он присутствует в модуле потоковой передачи и позволяет избежать беспорядочного вывода. Теперь давайте посмотрим, что означает Замок и чем он отличается от замка. Блокировка используется для того, чтобы избежать нежелательной блокировки ресурса. Метод блокировки по умолчанию не понимает, какую угрозу в данный момент содержит блокировка, из-за которой все потоки заблокированы. Это может сделать процесс немного медленным.

Вывод

В этой статье мы рассмотрели блокировку Python. Мы попытались понять необходимость использования замка и то, как он нам помогает. Мы также рассмотрели различные состояния блокировки и способы их приобретения. Для этого мы рассмотрели примерную задачу. Благодаря чему мы поняли, какое значение это имеет для результата.

Надеюсь, эта статья смогла развеять все сомнения. Но если у вас есть какие-либо нерешенные вопросы, не стесняйтесь писать их ниже в разделе комментариев. Прочитав это, почему бы не прочитать о нормализации состояния далее.