Пример #1
0
def _test_loop(verbose=False):

    def on_cancel_timer_event(loop, timer_id, arg):
        cancel_timer_id = arg
        # This loop is the low-level zloop not the
        # types.Loop class. Need a cleaner way! 
        from pyczmq import zloop
        zloop.timer_end(loop, cancel_timer_id)
        return 0

    def on_timer_event(loop, item, arg):
        output_s = ffi.from_handle(arg)
        output_s.send('PING')
        return 0

    def on_socket_event(loop, item, arg):
        # typically arg would be some class object containing state
        # information that would be used within this event handler.
        input_s = ffi.from_handle(arg)
        assert input_s.recv() == 'PING'
        return -1  # end the reactor


    ctx = Context()
    output_s = ctx.socket(zmq.PAIR)
    input_s = ctx.socket(zmq.PAIR)
    output_s.bind('inproc://zloop.test')
    input_s.connect('inproc://zloop.test')

    loop = Loop()
    loop.set_verbose(verbose)

    # create a timer that will be cancelled
    cancel_timer_id = loop.timer(1000, 1, on_timer_event, None)
    loop.timer(5, 1, on_cancel_timer_event, cancel_timer_id)

    # After 10 msecs, send a ping message to output
    loop.timer(20, 1, on_timer_event, output_s.sock)

    poll_input = zmq.pollitem(socket=input_s.sock, events=zmq.POLLIN)

    # When we get the ping message, end the reactor
    loop.poller(poll_input, on_socket_event, input_s.sock)
    loop.set_tolerant(poll_input)

    loop.start()

    del loop
    del ctx
Пример #2
0
def test_zloop(verbose=False):
    ctx = zctx.new()
    output_s = zsocket.new(ctx, zmq.PAIR)
    input_s = zsocket.new(ctx, zmq.PAIR)
    zsocket.bind(output_s, "inproc://lkj")
    zsocket.connect(input_s, "inproc://lkj")

    @zloop.poll_callback
    def on_socket_event(loop, item, arg):
        assert zstr.recv(item.socket) == "PING"
        assert arg == 3
        return -1

    @zloop.timer_callback
    def on_timer_event(loop, item, arg):
        zstr.send(arg, "PING")
        return 0

    @zloop.timer_callback
    def on_cancel_timer_event(loop, item, arg):
        cancel_timer_id = arg
        rc = zloop.timer_end(loop, cancel_timer_id)
        assert rc == 0
        return 0

    l = zloop.new()
    zloop.set_verbose(l, verbose)

    # create a timer that will be cancelled
    cancel_timer_id = zloop.timer(l, 1000, 1, on_timer_event, None)
    zloop.timer(l, 5, 1, on_cancel_timer_event, cancel_timer_id)

    # After 10 msecs, send a ping message to output
    zloop.timer(l, 20, 1, on_timer_event, output_s)

    # When we get the ping message, end the reactor
    poll_input = zmq.pollitem(socket=input_s, events=zmq.POLLIN)
    zloop.poller(l, poll_input, on_socket_event, 3)
    zloop.set_tolerant(l, poll_input)
    zloop.start(l)

    del l
    del ctx
Пример #3
0
def test_zloop(verbose=False):
    ctx = zctx.new()
    output_s = zsocket.new(ctx, zmq.PAIR)
    input_s = zsocket.new(ctx, zmq.PAIR)
    zsocket.bind(output_s, 'inproc://lkj')
    zsocket.connect(input_s, 'inproc://lkj')

    @zloop.poll_callback
    def on_socket_event(loop, item, arg):
        assert zstr.recv(item.socket) == 'PING'
        assert arg == 3
        return -1

    @zloop.timer_callback
    def on_timer_event(loop, item, arg):
        zstr.send(arg, 'PING')
        return 0

    @zloop.timer_callback
    def on_cancel_timer_event(loop, item, arg):
        cancel_timer_id = arg
        rc = zloop.timer_end(loop, cancel_timer_id)
        assert (rc == 0)
        return 0

    l = zloop.new()
    zloop.set_verbose(l, verbose)

    # create a timer that will be cancelled
    cancel_timer_id = zloop.timer(l, 1000, 1, on_timer_event, None)
    zloop.timer(l, 5, 1, on_cancel_timer_event, cancel_timer_id)

    # After 10 msecs, send a ping message to output
    zloop.timer(l, 20, 1, on_timer_event, output_s)

    # When we get the ping message, end the reactor
    poll_input = zmq.pollitem(socket=input_s, events=zmq.POLLIN)
    zloop.poller(l, poll_input, on_socket_event, 3)
    zloop.set_tolerant(l, poll_input)
    zloop.start(l)

    del l
    del ctx
Пример #4
0
def _test_loop(verbose=False):

    # TODO: this test function is not working properly!
    # segfault occurs when trying to call timer callback.

    def on_socket_event(loop, item, arg):
        # typically arg would be some class object containing state
        # information that would be used within this event handler.
        input_s = ffi.from_handle(arg)
        assert input_s.recv() == 'PING'
        return -1  # end the reactor

    def on_timer_event(loop, item, arg):
        output_s = ffi.from_handle(arg)
        output_s.send('PING')
        return 0

    ctx = Context()
    output_s = ctx.socket(zmq.PAIR)
    input_s = ctx.socket(zmq.PAIR)
    output_s.bind('inproc://zloop.test')
    input_s.connect('inproc://zloop.test')

    loop = Loop()
    loop.set_verbose(verbose)

    # After 10 msecs, send a ping message to output
    loop.timer(10, 1, on_timer_event, output_s.sock)

    poll_input = zmq.pollitem(socket=input_s.sock, events=zmq.POLLIN)

    # When we get the ping message, end the reactor
    loop.poller(poll_input, on_socket_event, input_s.sock)
    loop.set_tolerant(poll_input)

    loop.start()

    del loop
    del ctx
Пример #5
0
def test_zloop():
    ctx = zctx.new()
    output = zsocket.new(ctx, zmq.PAIR)
    input = zsocket.new(ctx, zmq.PAIR)
    zsocket.bind(output, 'inproc://lkj')
    zsocket.connect(input, 'inproc://lkj')

    @ffi.callback('zloop_fn')
    def item_handler(loop, item, arg):
        assert zstr.recv(item.socket) == 'PING'
        assert ffi.from_handle(arg) == 3
        return -1

    @ffi.callback('zloop_fn')
    def timer_handler(loop, item, arg):
        zstr.send(arg, 'PING')
        return 0

    l = zloop.new()
    zloop.timer(l, 10, 1, timer_handler, output)
    zloop.poller(
        l, zmq.pollitem(socket=input, events=zmq.POLLIN), item_handler, 3)
    zloop.start(l)