Exemplo n.º 1
0
 def fn():
     yield tap.CallFork(pop_and_add)
     yield tap.CallFork(pop_and_add)
     yield q.Put(3)
     yield q.Put(5)
     yield q.Put(5)
     yield q.Put(8)
Exemplo n.º 2
0
 def fn():
     # fork in apparently wrong order!
     broadcast_strand = yield tap.CallFork(broadcaster, (5, ))
     recv_strand = yield tap.CallFork(receiver)
     yield tap.Join(broadcast_strand)
     value = yield tap.Join(recv_strand)
     return value
Exemplo n.º 3
0
 def fn():
     intercept_strand = yield tap.CallFork(intercepter)
     yield tap.Cancel(intercept_strand)
     recv_strand = yield tap.CallFork(receiver)
     # even though this is forked, it doesn't end up hanging
     yield tap.Call(broadcaster, (5, ))
     # this gets intercepted and never gets injected
     yield tap.Join(recv_strand)
Exemplo n.º 4
0
 def receiver():
     value = yield tap.Receive('key')
     if value < 10:
         broadcast_strand = yield tap.CallFork(broadcaster, (value + 1, ))
         receive_strand = yield tap.CallFork(receiver)
         yield tap.Join([broadcast_strand, receive_strand])
     raise Exception("too large")
     return value
Exemplo n.º 5
0
 def fn():
     intercept_strand = yield tap.CallFork(intercepter)
     yield tap.Cancel(intercept_strand)
     recv_strand = yield tap.CallFork(receiver)
     # even though this is forked, it doesn't end up hanging
     yield tap.Call(broadcaster, (5, ))
     value = yield tap.Join(recv_strand)
     assert value == 5  # did *not* get intercepted
     return value
Exemplo n.º 6
0
 def fn():
     recv_strand = yield tap.CallFork(receiver)
     # even though this is forked, it doesn't end up hanging
     yield tap.CallFork(broadcaster, (5, ))
     value = yield tap.Join(recv_strand)
     # join again should give the same thing, it's already done
     value1 = yield tap.Join(recv_strand)
     assert value1 == value
     return value
Exemplo n.º 7
0
 def fn():
     intercept_strand = yield tap.CallFork(intercepter)
     recv_strand = yield tap.CallFork(receiver)
     # even though this is forked, it doesn't end up hanging
     broadcast_strand = yield tap.CallFork(broadcaster, (5, ))
     value = yield tap.Join(recv_strand)
     assert value == "real"  # got intercepted
     yield tap.Join(intercept_strand)
     yield tap.Cancel(broadcast_strand)
     return value
Exemplo n.º 8
0
 def fn():
     strand_1 = yield tap.CallFork(receiver, (1, ))
     strand_2 = yield tap.CallFork(receiver, (2, ))
     strand_3 = yield tap.CallFork(receiver, (3, ))
     results = yield tap.Fork([
         tap.First([strand_1, strand_2, strand_3]),
         tap.First([strand_2, strand_1]),
     ])
     yield tap.Call(broadcaster, (5, ))
     yield tap.Call(broadcaster, (3, ))
     yield tap.Call(broadcaster, (1, ))
     value = yield tap.Join(results)
     return value
Exemplo n.º 9
0
 def fn():
     strand_1 = yield tap.CallFork(receiver, (1, ))
     strand_2 = yield tap.CallFork(receiver, (2, ))
     strand_3 = yield tap.CallFork(receiver, (3, ))
     results = yield tap.Fork([
         tap.First([strand_1, strand_2], name="1v2"),
         tap.First([strand_2, strand_3], name="2v3"),
     ])
     yield tap.Call(broadcaster, (5, ))
     yield tap.Call(broadcaster, (1, ))
     yield tap.Call(broadcaster, (3, ))
     value = yield tap.Join(results, name="joinfork")
     yield tap.Join(strand_2, name="joincanceled")
     return value
Exemplo n.º 10
0
    def fn():
        yield q.Put(3)
        t1 = yield tap.CallFork(put, (5, ))
        t2 = yield tap.CallFork(put, (7, ))
        yield tap.Sleep(0)
        assert (yield q.Get()) == 3
        assert (yield q.Get()) == 5
        yield tap.Cancel(t2)  # too late
        assert (yield q.Get()) == 7
        yield tap.Join([t1])

        t = yield tap.Fork(q.Get())
        yield q.Put(3)
        assert (yield tap.Join(t)) == 3
Exemplo n.º 11
0
    def fn():
        yield q.Put(3)
        t1 = yield tap.CallFork(put, (5, ))
        t2 = yield tap.CallFork(put, (7, ))
        t3 = yield tap.CallFork(put, (9, ))
        yield tap.Sleep(0)
        assert (yield q.Get()) == 3
        yield tap.Cancel(t2)  # not too late to cancel
        assert (yield q.Get()) == 5
        assert (yield q.Get()) == 9
        yield tap.Join([t1, t3])

        t = yield tap.Fork(q.Get())
        yield q.Put(3)
        assert (yield tap.Join(t)) == 3
Exemplo n.º 12
0
    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
Exemplo n.º 13
0
    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
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
    def fn():
        assert not q.has_work()
        t1 = yield tap.CallFork(pop_and_add)
        t2 = yield tap.CallFork(pop_and_add)
        t3 = yield tap.CallFork(pop_and_add)
        yield tap.Sleep(0)
        assert a == 0
        yield q.Put(3)
        assert a == 3

        yield tap.Cancel(t2)
        yield q.Put(5)
        assert a == 8

        yield q.Put(5)
        assert a == 8

        t4 = yield tap.CallFork(pop_and_add)
        yield tap.Sleep(0)
        assert a == 13

        yield tap.Join([t1, t3, t4])
Exemplo n.º 16
0
 def fn():
     yield tap.CallFork(broadcaster, (5, ))
     return
Exemplo n.º 17
0
 def fn():
     recv_strand = yield tap.CallFork(receiver)
     broadcast_strand = yield tap.CallFork(broadcaster, (5, ))
     yield tap.Join(broadcast_strand)
     value = yield tap.Join(recv_strand)
     return value
Exemplo n.º 18
0
 def fn():
     task = yield tap.CallFork(wake_and_fork)
     yield tap.Receive("wake")
     yield tap.Cancel(task)
Exemplo n.º 19
0
 def fork_fn():
     strand = yield tap.CallFork(random, (5, ))
     x = yield tap.Join(strand)
     return x
Exemplo n.º 20
0
 def fn():
     strand = yield tap.CallFork(add_three, (5, ))
     yield tap.Broadcast('key')
     yield tap.Broadcast('key')
     yield tap.Cancel(strand)
Exemplo n.º 21
0
 def fn():
     t = yield tap.CallFork(acquire)
     yield tap.Sleep(0.001)
     yield tap.Cancel(t)
     t = yield tap.CallFork(acquire)
     yield tap.Sleep(0.001)