本文整理汇总了Python中rx.disposable.SingleAssignmentDisposable类的典型用法代码示例。如果您正苦于以下问题:Python SingleAssignmentDisposable类的具体用法?Python SingleAssignmentDisposable怎么用?Python SingleAssignmentDisposable使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SingleAssignmentDisposable类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: subscribe
def subscribe(observer, scheduler=None):
group = CompositeDisposable()
is_stopped = [False]
m = SingleAssignmentDisposable()
group.add(m)
def on_next(inner_source):
inner_subscription = SingleAssignmentDisposable()
group.add(inner_subscription)
inner_source = from_future(inner_source) if is_future(inner_source) else inner_source
@synchronized(source.lock)
def on_completed():
group.remove(inner_subscription)
if is_stopped[0] and len(group) == 1:
observer.on_completed()
on_next = synchronized(source.lock)(observer.on_next)
on_error = synchronized(source.lock)(observer.on_error)
subscription = inner_source.subscribe_(on_next, on_error, on_completed, scheduler)
inner_subscription.disposable = subscription
def on_completed():
is_stopped[0] = True
if len(group) == 1:
observer.on_completed()
m.disposable = source.subscribe_(on_next, observer.on_error, on_completed, scheduler)
return group
示例2: subscribe
def subscribe(observer, scheduler=None):
d1 = SingleAssignmentDisposable()
subscription = SerialDisposable()
subscription.disposable = d1
def on_error(exception):
try:
result = handler(exception, source)
except Exception as ex: # By design. pylint: disable=W0703
observer.on_error(ex)
return
result = rx.from_future(result) if is_future(result) else result
d = SingleAssignmentDisposable()
subscription.disposable = d
d.disposable = result.subscribe(observer, scheduler=scheduler)
d1.disposable = source.subscribe_(
observer.on_next,
on_error,
observer.on_completed,
scheduler
)
return subscription
示例3: on_next
def on_next(inner_source: Observable):
nonlocal source
d = SingleAssignmentDisposable()
with source.lock:
latest[0] += 1
_id = latest[0]
has_latest[0] = True
inner_subscription.disposable = d
# Check if Future or Observable
inner_source = from_future(inner_source) if is_future(inner_source) else inner_source
def on_next(x: Any) -> None:
if latest[0] == _id:
observer.on_next(x)
def on_error(e: Exception) -> None:
if latest[0] == _id:
observer.on_error(e)
def on_completed() -> None:
if latest[0] == _id:
has_latest[0] = False
if is_stopped[0]:
observer.on_completed()
d.disposable = inner_source.subscribe_(on_next, on_error, on_completed, scheduler=scheduler)
示例4: schedulePeriodicWithState
def schedulePeriodicWithState(self, state, period, action):
failed = False
failureLock = RLock
d = SingleAssignmentDisposable()
def scheduled(_state):
with failureLock:
nonlocal failed
if failed:
return None
try:
return action(_state)
except Exception as e:
failed = True
if not self.handler(e):
raise e
d.dispose()
return None
d.disposable = self._scheduler.schedulePeriodicWithState(
state,
period,
scheduled
)
return d
示例5: on_next_right
def on_next_right(value):
duration = None
current_id = right_id[0]
right_id[0] += 1
md = SingleAssignmentDisposable()
right_map[current_id] = value
group.add(md)
def expire():
if current_id in right_map:
del right_map[current_id]
if not len(right_map) and right_done[0]:
observer.on_completed()
return group.remove(md)
try:
duration = right_duration_mapper(value)
except Exception as exception:
observer.on_error(exception)
return
md.disposable = duration.pipe(take(1)).subscribe_(noop, observer.on_error, lambda: expire(), scheduler)
for val in left_map.values():
result = (val, value)
observer.on_next(result)
示例6: onNext
def onNext(self, value):
resourceId = 0
with self.parent.gate:
self.parent.rightID += 1
resourceId = self.parent.rightID
self.parent.rightMap[resourceId] = value
# AddRef was originally WindowObservable but this is just an alias for AddRef
md = SingleAssignmentDisposable()
self.parent.group.add(md)
try:
duration = self.parent.parent.rightDurationSelector(value)
except Exception as e:
self.parent.observer.onError(e)
self.parent.dispose()
return
else:
md.disposable = duration.subscribeSafe(self.Delta(self, resourceId, md))
with self.parent.gate:
for leftValue in self.parent.leftMap.values():
try:
result = self.parent.parent.resultSelector(leftValue, value)
except Exception as e:
self.parent.observer.onError(e)
self.parent.dispose()
return
else:
self.parent.observer.onNext(result)
示例7: ScheduledItem
class ScheduledItem(Generic[typing.TState]): # pylint: disable=unsubscriptable-object
def __init__(self, scheduler: SchedulerBase, state: Optional[typing.TState], action: typing.ScheduledAction,
duetime: typing.AbsoluteTime):
self.scheduler = scheduler
self.state = state
self.action = action
self.duetime = duetime
self.disposable = SingleAssignmentDisposable()
def invoke(self) -> None:
ret = self.scheduler.invoke_action(self.action, self.state)
self.disposable.disposable = ret
def cancel(self) -> None:
"""Cancels the work item by disposing the resource returned by
invoke_core as soon as possible."""
self.disposable.dispose()
def is_cancelled(self) -> bool:
return self.disposable.is_disposed
def __lt__(self, other):
return self.duetime < other.duetime
def __gt__(self, other):
return self.duetime > other.duetime
def __eq__(self, other):
return self.duetime == other.duetime
示例8: onNext
def onNext(self, value):
s = Subject()
resourceId = 0
with self.parent.gate:
self.parent.leftID += 1
resourceId = self.parent.leftID
self.parent.leftMap[resourceId] = s
# AddRef was originally WindowObservable but this is just an alias for AddRef
window = AddRef(s, self.parent.refCount)
md = SingleAssignmentDisposable()
self.parent.group.add(md)
try:
duration = self.parent.parent.leftDurationSelector(value)
except Exception as e:
self.onError(e)
return
else:
md.disposable = duration.subscribeSafe(self.Delta(self, resourceId, s, md))
try:
result = self.parent.parent.resultSelector(value, window)
except Exception as e:
self.onError(e)
return
else:
with self.parent.gate:
self.parent.observer.onNext(result)
for rightValue in self.parent.rightMap.values():
s.onNext(rightValue)
示例9: subscribe_all
def subscribe_all(parent, *children):
values = [NO_VALUE for _ in children]
def subscribe_child(i, child):
subscription = SingleAssignmentDisposable()
def on_next(value):
with parent.lock:
values[i] = value
subscription.disposable = child.subscribe_(on_next, observer.on_error, scheduler=scheduler)
return subscription
parent_subscription = SingleAssignmentDisposable()
def on_next(value):
with parent.lock:
if NO_VALUE not in values:
result = (value,) + tuple(values)
observer.on_next(result)
disp = parent.subscribe_(on_next, observer.on_error, observer.on_completed, scheduler)
parent_subscription.disposable = disp
children_subscription = [subscribe_child(i, child) for i, child in enumerate(children)]
return [parent_subscription] + children_subscription
示例10: Sink
class Sink(rx.linq.sink.Sink):
def __init__(self, parent, observer, cancel):
super(SampleWithObservable.Sink, self).__init__(observer, cancel)
self.parent = parent
def run(self):
self.gate = RLock()
self.atEnd = False
self.hasValue = False
self.value = None
self.sourceSubscription = SingleAssignmentDisposable()
self.sourceSubscription.disposable = self.parent.source.subscribeSafe(self)
samplerSubscription = self.parent.sampler.subscribeSafe(self.SamplerObserver(self))
return CompositeDisposable(self.sourceSubscription, samplerSubscription)
def onNext(self, value):
with self.gate:
self.hasValue = True
self.value = value
def onError(self, exception):
with self.gate:
self.observer.onError(exception)
self.dispose()
def onCompleted(self):
with self.gate:
self.atEnd = True
self.sourceSubscription.dispose()
class SamplerObserver(Observer):
def __init__(self, parent):
self.parent = parent
def onNext(self, value):
with self.parent.gate:
if self.parent.hasValue:
self.parent.hasValue = False
self.parent.observer.onNext(self.parent.value)
if self.parent.atEnd:
self.parent.observer.onCompleted()
self.parent.dispose()
def onError(self, exception):
with self.parent.gate:
self.parent.observer.onError(exception)
self.parent.dispose()
def onCompleted(self):
with self.parent.gate:
if self.parent.hasValue:
self.parent.hasValue = False
self.parent.observer.onNext(self.parent.value)
if self.parent.atEnd:
self.parent.observer.onCompleted()
self.parent.dispose()
示例11: createTimer
def createTimer(self):
m = SingleAssignmentDisposable()
self.timerDisposable.disposable = m
isSpan = False
isShift = False
if self.nextSpan == self.nextShift:
isSpan = True
isShift = True
elif self.nextShift < self.nextShift:
isSpan = True
else:
isShift = True
newTotalTime = self.nextSpan if isSpan else self.nextShift
ts = newTotalTime - self.totalTime
self.totalTime = newTotalTime
if isSpan:
self.nextSpan += self.parent.timeShift
if isShift:
self.nextShift += self.parent.timeShift
m.disposable = self.parent.scheduler.scheduleWithRelativeAndState(
Struct(isSpan=isSpan, isShift=isShift),
ts,
self.tick
)
示例12: schedule_periodic
def schedule_periodic(self,
period: typing.RelativeTime,
action: typing.ScheduledPeriodicAction,
state: Optional[typing.TState] = None
) -> typing.Disposable:
"""Schedules a periodic piece of work.
Args:
period: Period in seconds or timedelta for running the
work periodically.
action: Action to be executed.
state: [Optional] Initial state passed to the action upon
the first iteration.
Returns:
The disposable object used to cancel the scheduled
recurring action (best effort).
"""
d = SingleAssignmentDisposable()
failed = False
def periodic_action(periodic_state) -> Optional[typing.TState]:
nonlocal failed
if not failed:
try:
return action(periodic_state)
except Exception as ex:
failed = True
if not self._handler(ex):
raise
d.dispose()
return None
d.disposable = self._scheduler.schedule_periodic(period, periodic_action, state=state)
return d
示例13: run
def run(self):
srcs = list(self.parent.sources)
N = len(srcs)
self.queues = [None] * N
self.isDone = [False] * N
self.subscriptions = [None] * N
self.gate = RLock()
for i in range(0, N):
self.queues[i] = deque()
# Loop twice because subscribing could already yield
# a value before all queues are initialized
for i in range(0, N):
d = SingleAssignmentDisposable()
self.subscriptions[i] = d
o = self.O(self, i)
d.disposable = srcs[i].subscribeSafe(o)
c = CompositeDisposable(self.subscriptions)
def dispose():
for q in self.queues:
q.clear()
c.add(Disposable.create(dispose))
return c
示例14: on_next
def on_next(x):
throttle = None
try:
throttle = throttle_duration_mapper(x)
except Exception as e: # pylint: disable=broad-except
observer.on_error(e)
return
has_value[0] = True
value[0] = x
_id[0] += 1
current_id = _id[0]
d = SingleAssignmentDisposable()
cancelable.disposable = d
def on_next(x: Any) -> None:
if has_value[0] and _id[0] == current_id:
observer.on_next(value[0])
has_value[0] = False
d.dispose()
def on_completed() -> None:
if has_value[0] and _id[0] == current_id:
observer.on_next(value[0])
has_value[0] = False
d.dispose()
d.disposable = throttle.subscribe_(on_next, observer.on_error, on_completed, scheduler=scheduler)
示例15: action
def action(scheduler, state):
if queue:
work = queue.pop(0)
else:
is_acquired[0] = False
return
sad = SingleAssignmentDisposable()
d.add(sad)
def on_next(value):
observer.on_next(value)
result = None
try:
result = mapper(value)
except Exception as ex:
observer.on_error(ex)
return
queue.append(result)
active_count[0] += 1
ensure_active()
def on_complete():
d.remove(sad)
active_count[0] -= 1
if active_count[0] == 0:
observer.on_completed()
sad.disposable = work.subscribe_(on_next, observer.on_error, on_complete, scheduler)
m.disposable = scheduler.schedule(action)