def fn(): yield tap.CallFork(acquire) t = yield tap.CallFork(acquire) yield tap.CallFork(acquire) yield tap.Sleep(0) assert a == 5 yield tap.Cancel(t) yield tap.Broadcast("unlock") yield tap.Sleep(0.01) assert a == 10 yield tap.Broadcast("unlock") yield tap.Sleep(0.001) assert a == 10
def fn(): yield tap.CallFork(waits) yield tap.CallFork(nowaits) yield tap.CallFork(nowaits) yield tap.Sleep(0) assert a == 5 # the waiting strand finally gets to acquire lock, but it is the latest yield tap.Broadcast("msg") yield tap.Sleep(0) assert a == 6 yield tap.Broadcast("unlock") yield tap.Sleep(0.01) assert a == 11 yield tap.Broadcast("unlock") yield tap.Sleep(0.01) assert a == 13
def fn(): t1 = yield tap.CallFork(acquire, (1, None)) t2 = yield tap.CallFork(acquire, (2, t1)) t3 = yield tap.CallFork(acquire, (3, None)) yield tap.Broadcast("2") yield tap.Broadcast("1") yield tap.Sleep(0.001) assert a == 5 yield tap.Broadcast("3") yield tap.Broadcast( "2") # this simultaneously tries to cancel 1 and unlocks yield tap.Sleep(0.01) assert a == 10 yield tap.Broadcast("1") # 1 gets canceled after the acquire, so it's too late to release yield tap.Sleep(0.001) assert a == 10 # yield tap.Join([t1, t2, t3]) yield tap.Cancel(t3)
def broadcaster(value): yield tap.Broadcast('key', value) yield tap.Broadcast('key2', value)
def fn(): yield tap.Broadcast('key') return 5
def wake_and_fork(): yield tap.Fork(tap.Broadcast("wake")) yield tap.Fork(tap.Receive("hmm"))
def fn2(value): yield tap.Broadcast('key3', value) yield tap.Broadcast('key4', value) return 2
def fn1(value): yield tap.Broadcast('key1', value) yield tap.Broadcast('key2', value) return 1
def fn(): strand = yield tap.CallFork(add_three, (5, )) yield tap.Broadcast('key') yield tap.Broadcast('key') yield tap.Cancel(strand)
def random(value): yield tap.Broadcast('key', value) return 10