Событие Python Threading: зачем нам clear () - PullRequest
1 голос
/ 25 сентября 2019

Я новичок в Python.Я пробую свои силы на модуле threading.Я сталкивался с Event объектами.
Объекты событий имеют
wait
set
clear
функций.Я понимаю, что ждать, установить и ясно делают.Но я не совсем понимаю, почему существует отдельный четкий метод.Разве это не может быть включено в реализацию метода set?
Большая часть кода, который я видел до сих пор, имеет метод set, за которым следует метод clear.Так что последующие вызовы метода ожидания wait.
Я пришел из мира Java и не мог не сравнить это с вызовами методов wait и notify.В Java нет эквивалентного вызова метода для очистки.

Есть ли какой-либо вариант использования, когда можно было бы использовать метод set, но не понятный?

1 Ответ

1 голос
/ 25 сентября 2019

Я бы сказал, что Event Python против Java wait / notify реализуют различные абстракции и, следовательно, они полезны в разных ситуациях.

возможно, вы ищете Python Condition класс?это выглядит намного ближе к механизмам Java Object wait и notify и даже следует тому же соглашению об именах методов

в качестве мотивирующего примера, подумайте о реализации Future в Python, он может просто wait на Event, зная, что это было только set, когда завершился асинхронный код.в Java вам придется делать что-то еще, потому что в коде есть условие гонки:

synchronized (obj) {
  if (!obj.has_result) {
    obj.wait();
  }
  return obj.result;
}
...