示例#1
0
def test_send_recv():
    ch = Channel(bufsize=2)
    for x in range(2):
        yield ch.send('ok%s' % x)
    for x in range(2):
        r = yield ch.recv()
        assert r == 'ok%s' % x
示例#2
0
def test_buffers_twoway():
    for i in xrange(10):
        ch1 = Channel(i)
        ch2 = Channel(i)
        xs = range(10000)
        chat1(ch1, ch2, xs)
        yield chat2(ch1, ch2, xs)
示例#3
0
def try_pattern(pattern):
    # s = start send, r = start recv, R = wait for a recv, S = wait for a send
    print "in try_pattern"
    assert (pattern.count("s") == pattern.count("S") ==
            pattern.count("r") == pattern.count("R"))
    print "assert passed"
    cs = 0
    cr = 0
    scbs = deque()
    rcbs = deque()
    ch = Channel()

    for c in pattern:
        if c == "s":
            print "starting send"
            scbs.append(ch.send(cs))
            cs += 1
            print "started send"
        elif c == "S":
            print "waiting for send"
            yield scbs.popleft()
            print "done waiting for send"
        elif c == "r":
            print "starting recv"
            rcbs.append(ch.recv())
            print "started recv"
        elif c == "R":
            print "waiting for recv"
            x = yield rcbs.popleft()
            print "done waiting for recv"
            assert x == cr, "%s != %s" % (x, cr)
            print "post-recv assert passed"
            cr += 1
    print "leaving try_pattern"
示例#4
0
def main():
    ch = Channel()  # Create a new channel.
    monocle.launch(generate, ch)  # Start generate() as an o-routine.
    while True:
        prime = yield ch.recv()
        print prime
        ch1 = Channel()
        filter(ch, ch1, prime)
        ch = ch1
示例#5
0
def main():
    s = 2
    ch = Channel(s)
    for i in xrange(s):
        print i
        yield ch.fire(i)

    print ch.bufsize, len(ch._msgs)
    for i in xrange(s):
        print (yield ch.wait())
    print "done"
示例#6
0
def main():
    s = 2
    ch = Channel(s)
    for i in xrange(s):
        print i
        yield ch.send(i)

    print ch.bufsize, len(ch._msgs)
    for i in xrange(s):
        print(yield ch.recv())
    print "done"
示例#7
0
文件: simplechan.py 项目: sah/tricle
def main():
    s = 2
    ch = Channel(s)
    for i in range(s):
        print(i)
        yield ch.send(i)

    print(ch.bufsize, len(ch._msgs))
    for i in range(s):
        print((yield ch.recv()))
    print("done")
示例#8
0
def main():
    s = 2
    ch = Channel(s)
    for i in xrange(s):
        print(i)
        yield ch.send(i)

    print(ch.bufsize, len(ch._msgs))
    for i in xrange(s):
        print((yield ch.recv()))
    print("done")
示例#9
0
def main():
    s = 2
    ch = Channel(s)
    for i in xrange(s):
        print i
        yield ch.send(i)

    print ch.bufsize, len(ch._msgs)
    for i in xrange(s):
        print (yield ch.recv())
    print "done"
    sys.exit(0)
示例#10
0
def main():
    """
    The prime sieve: Daisy-chain filter processes together.
    """
    ch = Channel()  # Create a new channel.
    monocle.launch(generate, ch)  # Start generate() as an o-routine.
    while True:
        prime = yield ch.recv()
        print(prime)
        ch1 = Channel()
        filter(ch, ch1, prime)
        ch = ch1
示例#11
0
    def __init__(self, a=None, b=None):
        if a == None:
            self.a = Channel(buffsize)
        else:
            self.a = a
        if b == None:
            self.b = Channel(buffsize)
        else:
            self.b = b

        self.inBuff = b""
        self.outBuff = b""
示例#12
0
    def __init__(self, a=None, b=None):
        if a == None:
            self.a = Channel(buffsize)
        else:
            self.a = a
        if b == None:
            self.b = Channel(buffsize)
        else:
            self.b = b

        self.inBuff = b''
        self.outBuff = b''
示例#13
0
文件: sieve.py 项目: sah/tricle
def main():
    """
    The prime sieve: Daisy-chain filter processes together.
    """
    ch = Channel()  # Create a new channel.
    monocle.launch(generate, ch)  # Start generate() as an o-routine.
    while True:
        prime = yield ch.recv()
        print(prime)
        ch1 = Channel()
        monocle.launch(filter, ch, ch1, prime)
        ch = ch1
示例#14
0
class FakeSocket(object):
    def __init__(self, a=None, b=None):
        if a == None:
            self.a = Channel(buffsize)
        else:
            self.a = a
        if b == None:
            self.b = Channel(buffsize)
        else:
            self.b = b

        self.inBuff = b""
        self.outBuff = b""

    def invert(self):
        return FakeSocket(a=self.b, b=self.a)

    @_o
    def read(self, x):
        while len(self.inBuff) < x:
            data = yield self.a.recv()
            if data:
                self.inBuff = self.inBuff + data
            else:
                yield ConnectionLost()

        data = self.inBuff[:x]
        self.inBuff = self.inBuff[x:]

        yield Return(data)

    @_o
    def read_some(self):
        if len(self.inBuff) > 0:
            data = self.inBuff
            self.inBuff = b""
            yield Return(data)
        else:
            data = b""
            while len(data) == 0:
                data = yield self.a.recv()
            if data:
                yield Return(data)
            else:
                yield ConnectionLost()

    @_o
    def write(self, bs):
        yield self.b.send(bs)

    def close(self):
        yield self.b.send(None)
示例#15
0
class FakeSocket(object):
    def __init__(self, a=None, b=None):
        if a == None:
            self.a = Channel(buffsize)
        else:
            self.a = a
        if b == None:
            self.b = Channel(buffsize)
        else:
            self.b = b

        self.inBuff = b''
        self.outBuff = b''

    def invert(self):
        return FakeSocket(a=self.b, b=self.a)

    @_o
    def read(self, x):
        while len(self.inBuff) < x:
            data = yield self.a.recv()
            if data:
                self.inBuff = self.inBuff + data
            else:
                yield ConnectionLost()

        data = self.inBuff[:x]
        self.inBuff = self.inBuff[x:]

        yield Return(data)

    @_o
    def read_some(self):
        if len(self.inBuff) > 0:
            data = self.inBuff
            self.inBuff = b''
            yield Return(data)
        else:
            data = b''
            while len(data) == 0:
                data = yield self.a.recv()
            if data:
                yield Return(data)
            else:
                yield ConnectionLost()

    @_o
    def write(self, bs):
        yield self.b.send(bs)

    def close(self):
        yield self.b.send(None)
示例#16
0
def setup_input():
    from monocle.experimental import Channel

    line_input = Channel(10)

    def quit():
        sys.stdout.write("bye!\n")
        sys.stdout.flush()
        import AppKit
        AppKit.NSApp.terminate_(AppKit.NSApp)

    def handle_line(observer, data):
        if not data:
            return quit()
        line_input.send(data)

    def handle_error(err):
        sys.stdout.write("error!\n")

    FileObserver.alloc().initWithFileDescriptor_readCallback_errorCallback_(
        sys.stdin.fileno(), handle_line, handle_error).retain()

    return line_input.recv
示例#17
0
def test_buffers_oneway():
    for i in xrange(10):
        ch = Channel(i)
        xs = range(10000)
        sendxs(ch, xs)
        yield recvxs(ch, xs)
示例#18
0
 def __init__(self, chan, subchans):
     self.chan = chan
     self.channels = dict([(subchan, Channel(bufsize=float("inf")))
                           for subchan in subchans])
     launch(self._receiver)