Пример #1
0
class TestQueueTimeouts(object):
    def setup(self):
        self.result = Event()
        self.queue = Queue()
        self.timeouts = 0
        diesel.fork(self.consumer, 0.01)
        diesel.fork(self.producer, 0.05)
        diesel.fork(self.consumer, 0.10)
        ev, val = diesel.first(sleep=TIMEOUT, waits=[self.result])
        if ev == 'sleep':
            assert 0, 'timed out'

    def consumer(self, timeout):
        try:
            self.queue.get(timeout=timeout)
            self.result.set()
        except QueueTimeout:
            self.timeouts += 1

    def producer(self, delay):
        diesel.sleep(delay)
        self.queue.put('test')

    def test_a_consumer_timed_out(self):
        assert self.timeouts == 1

    def test_a_consumer_got_a_value(self):
        assert self.result.is_set
Пример #2
0
class TestQueueTimeouts(object):
    def setup(self):
        self.result = Event()
        self.queue = Queue()
        self.timeouts = 0
        diesel.fork(self.consumer, 0.01)
        diesel.fork(self.producer, 0.05)
        diesel.fork(self.consumer, 0.10)
        ev, val = diesel.first(sleep=TIMEOUT, waits=[self.result])
        if ev == 'sleep':
            assert 0, 'timed out'

    def consumer(self, timeout):
        try:
            self.queue.get(timeout=timeout)
            self.result.set()
        except QueueTimeout:
            self.timeouts += 1

    def producer(self, delay):
        diesel.sleep(delay)
        self.queue.put('test')

    def test_a_consumer_timed_out(self):
        assert self.timeouts == 1

    def test_a_consumer_got_a_value(self):
        assert self.result.is_set
Пример #3
0
class DieselNitroSocket(Waiter):
    def __init__(self, bind=None, connect=None, **kwargs):
        Waiter.__init__(self)
        self.destroyed = False
        kwargs['want_eventfd'] = 1
        self.socket = pynitro.NitroSocket(**kwargs)
        self._early_value = None
        from diesel.runtime import current_app
        from diesel.hub import IntWrap

        if bind:
            assert not connect
            self.socket.bind(bind)
        elif connect:
            assert not bind
            self.socket.connect(connect)

        self.hub = current_app.hub
        self.fd = IntWrap(self.socket.fileno())

        self.read_gate = Event()
        self.hub.register(self.fd, self.messages_exist, self.error, self.error)
        self.sent = 0
        self.received = 0

    def _send_op(self, op):
        while True:
            try:
                op()
            except pynitro.NitroFull:
                diesel.sleep(0.2)
            else:
                self.sent += 1
                return

    def recv(self):
        while True:
            try:
                m = self.socket.recv(self.socket.NOWAIT)
            except pynitro.NitroEmpty:
                self.read_gate.clear()
                self.read_gate.wait()
            else:
                self.received += 1
                return m

    def send(self, frame, flags=0):
        return self._send_op(
            partial(self.socket.send, frame, self.socket.NOWAIT | flags))

    def reply(self, orig, frame, flags=0):
        return self._send_op(
            partial(self.socket.reply, orig, frame, self.socket.NOWAIT | flags))

    def process_fire(self, dc):
        if not self._early_value:
            got = self.ready_early()
            if not got:
                raise StopWaitDispatch()

        assert self._early_value
        v = self._early_value
        self._early_value = None
        return v

    def ready_early(self):
        if self._early_value:
            return True
        try:
            m = self.socket.recv(self.socket.NOWAIT)
        except pynitro.NitroEmpty:
            self.read_gate.clear()
            return False
        else:
            self.received += 1
            self._early_value = m
            return True

    def messages_exist(self):
        '''Handle state change.
        '''
        self.read_gate.set()
        diesel.fire(self)

    def error(self):
        raise RuntimeError("OH NOES, some weird nitro FD callback")


    def destroy(self):
        if not self.destroyed:
            self.hub.unregister(self.fd)
            del self.socket
            self.destroyed = True

    def __enter__(self):
        return self

    def __del__(self):
        self.destroy()

    def __exit__(self, *args):
        self.destroy()
Пример #4
0
class DieselNitroSocket(Waiter):
    def __init__(self, bind=None, connect=None, **kwargs):
        Waiter.__init__(self)
        self.destroyed = False
        kwargs['want_eventfd'] = 1
        self.socket = pynitro.NitroSocket(**kwargs)
        self._early_value = None
        from diesel.runtime import current_app
        from diesel.hub import IntWrap

        if bind:
            assert not connect
            self.socket.bind(bind)
        elif connect:
            assert not bind
            self.socket.connect(connect)

        self.hub = current_app.hub
        self.fd = IntWrap(self.socket.fileno())

        self.read_gate = Event()
        self.hub.register(self.fd, self.messages_exist, self.error, self.error)
        self.sent = 0
        self.received = 0

    def _send_op(self, op):
        while True:
            try:
                op()
            except pynitro.NitroFull:
                diesel.sleep(0.2)
            else:
                self.sent += 1
                return

    def recv(self):
        while True:
            try:
                m = self.socket.recv(self.socket.NOWAIT)
            except pynitro.NitroEmpty:
                self.read_gate.clear()
                self.read_gate.wait()
            else:
                self.received += 1
                return m

    def send(self, frame, flags=0):
        return self._send_op(
            partial(self.socket.send, frame, self.socket.NOWAIT | flags))

    def reply(self, orig, frame, flags=0):
        return self._send_op(
            partial(self.socket.reply, orig, frame,
                    self.socket.NOWAIT | flags))

    def process_fire(self, dc):
        if not self._early_value:
            got = self.ready_early()
            if not got:
                raise StopWaitDispatch()

        assert self._early_value
        v = self._early_value
        self._early_value = None
        return v

    def ready_early(self):
        if self._early_value:
            return True
        try:
            m = self.socket.recv(self.socket.NOWAIT)
        except pynitro.NitroEmpty:
            self.read_gate.clear()
            return False
        else:
            self.received += 1
            self._early_value = m
            return True

    def messages_exist(self):
        '''Handle state change.
        '''
        self.read_gate.set()
        diesel.fire(self)

    def error(self):
        raise RuntimeError("OH NOES, some weird nitro FD callback")

    def destroy(self):
        if not self.destroyed:
            self.hub.unregister(self.fd)
            del self.socket
            self.destroyed = True

    def __enter__(self):
        return self

    def __del__(self):
        self.destroy()

    def __exit__(self, *args):
        self.destroy()