Весь смысл блокировки состоит в том, чтобы определенные разделы вашей программы выполнялись только по одному потоку или процессу за раз. Это достигается путем блокировки любых потоков/процессов, пытающихся получить блокировку, в то время как что-то еще удерживает ее.
Если вы не хотите, чтобы блокировка блокировалась, почему вы используете блокировку в первую очередь? Предположительно, чтобы вы могли сделать что-то еще, пока вы ждете?
Чтобы попытаться приобрести замок l
без блокировки, позвоните по телефону l.acquire(blocking=False)
. Это немедленно вернет False
, если замок не был приобретен. Если замок был, он возвращает True
, и вы продолжаете удерживать замок до тех пор, пока не назовете его метод release()
.
Эта форма, однако, не особенно полезна в операторе with
. Обычно вам нужен управляемый код (с отступом после with
) для запуска только после того, как блокировка была приобретена. не запрашивать, имеет ли он или нет, и предпринять два альтернативных действия.
Спасибо. Я должен использовать 'lock.acquire()'. : D. –