You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
791 B
43 lines
791 B
5 years ago
|
"""
|
||
|
Asyncronous event implementation.
|
||
|
"""
|
||
|
from __future__ import unicode_literals
|
||
|
from .future import Future
|
||
|
|
||
|
__all__ = [
|
||
|
'Event'
|
||
|
]
|
||
|
|
||
|
|
||
|
class Event(object):
|
||
|
"""
|
||
|
Like `asyncio.event`.
|
||
|
|
||
|
The state is intially false.
|
||
|
"""
|
||
|
def __init__(self):
|
||
|
self._state = False
|
||
|
self._waiting_futures = []
|
||
|
|
||
|
def is_set(self):
|
||
|
return self._state
|
||
|
|
||
|
def clear(self):
|
||
|
self._state = False
|
||
|
|
||
|
def set(self):
|
||
|
self._state = True
|
||
|
futures = self._waiting_futures
|
||
|
self._waiting_futures = []
|
||
|
|
||
|
for f in futures:
|
||
|
f.set_result(None)
|
||
|
|
||
|
def wait(self):
|
||
|
if self._state:
|
||
|
return Future.succeed(None)
|
||
|
else:
|
||
|
f = Future()
|
||
|
self._waiting_futures.append(f)
|
||
|
return f
|