Python использование события потока в качестве члена объекта - PullRequest
1 голос
/ 30 марта 2020

У меня есть класс, например, такой как

Class Example(object):
   trigger_event = threading.Event()

    def set_trigger(self):
        # do some stuff
        self.trigger_event.set()

Что я нахожу, если у меня есть группа этих объектов и обрабатывать их в одном потоке, то после того, как первый объект имеет свой набор событий, тогда все другие объекты также имеют его. Разве нет способа иметь уникальный элемент Event для каждого отдельного объекта?

Если у меня есть 10 объектов и распечатать is_set () для Event, прежде чем я вызову set_trigger (), тогда он будет отображаться как FALSE, ИСТИНА, ИСТИНА, ИСТИНА и т. Д. c ...

Заранее благодарим за любую помощь или понимание!

1 Ответ

1 голос
/ 30 марта 2020

Возможно, вы неправильно интерпретируете объект Event. Объект Event используется для связи между несколькими потоками: один поток сообщает о событии, а другие ожидают его.

Объект события управляет внутренним флагом, для которого можно установить значение true с помощью набора () и сбросьте в false с помощью метода clear (). Метод wait () блокируется до тех пор, пока флаг не станет истинным.

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

class Example(object):
    def __init__(self):
        self.trigger_event = threading.Event()

    def set_trigger(self):
        # do some stuff
        self.trigger_event.set()

e1 = Example()
print(e1.trigger_event.is_set())
e1.set_trigger()
print(e1.trigger_event.is_set())

e2 = Example()
print(e2.trigger_event.is_set())
e2.set_trigger()
e2.trigger_event.wait()
print(e2.trigger_event.is_set())

Вывод:

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