コード例 #1
0
 def handler(fd):
     obj = my_socket_map.get(fd)
     if obj is None:
         print "asyncore handler called for unknown socket", fd
         return
     
     asyncore.readwrite(obj, flag)
コード例 #2
0
ファイル: __init__.py プロジェクト: rogerdodger1/kodi.web-pdb
def epoll_poller(timeout=0.0, map=None):
    """
    A poller which uses epoll(), supported on Linux 2.5.44 and newer

    Borrowed from here:
    https://github.com/m13253/python-asyncore-epoll/blob/master/asyncore_epoll.py#L200
    """
    if map is None:
        map = asyncore.socket_map
    pollster = select.epoll()
    if map:
        for fd, obj in map.items():
            flags = 0
            if obj.readable():
                flags |= select.POLLIN | select.POLLPRI
            if obj.writable():
                flags |= select.POLLOUT
            if flags:
                # Only check for exceptions if object was either readable
                # or writable.
                flags |= select.POLLERR | select.POLLHUP | select.POLLNVAL
                pollster.register(fd, flags)
        try:
            r = pollster.poll(timeout)
        except select.error as err:
            if err.args[0] != EINTR:
                raise
            r = []
        for fd, flags in r:
            obj = map.get(fd)
            if obj is None:
                continue
            asyncore.readwrite(obj, flags)
コード例 #3
0
ファイル: asyncoremod.py プロジェクト: FSX/nene
def epoll_poller(timeout=0.0, map=None):
    """A poller which uses epoll(), supported on Linux 2.5.44 and newer."""

    if map is None:
        map = asyncore.socket_map
    if timeout is not None:
        # timeout is in milliseconds
        timeout = int(timeout * 1000)
    pollster = select.epoll()
    if map:
        for fd, obj in map.items():
            flags = 0
            if obj.readable():
                flags |= select.POLLIN | select.POLLPRI
            if obj.writable():
                flags |= select.POLLOUT
            if flags:
                # Only check for exceptions if object was either readable
                # or writable.
                flags |= select.POLLERR | select.POLLHUP | select.POLLNVAL
                pollster.register(fd, flags)
        try:
            r = pollster.poll(timeout)
        except select.error, err:
            if err.args[0] != EINTR:
                raise
            r = []
        for fd, flags in r:
            obj = map.get(fd)
            if obj is None:
                continue
            asyncore.readwrite(obj, flags)
コード例 #4
0
        def test_readwrite(self):
            # Check that correct methods are called by readwrite()

            attributes = ('read', 'expt', 'write', 'closed', 'error_handled')

            expected = (
                (select.POLLIN, 'read'),
                (select.POLLPRI, 'expt'),
                (select.POLLOUT, 'write'),
                (select.POLLERR, 'closed'),
                (select.POLLHUP, 'closed'),
                (select.POLLNVAL, 'closed'),
            )

            class testobj:
                def __init__(self):
                    self.read = False
                    self.write = False
                    self.closed = False
                    self.expt = False
                    self.error_handled = False

                def handle_read_event(self):
                    self.read = True

                def handle_write_event(self):
                    self.write = True

                def handle_close(self):
                    self.closed = True

                def handle_expt_event(self):
                    self.expt = True

                def handle_error(self):
                    self.error_handled = True

            for flag, expectedattr in expected:
                tobj = testobj()
                self.assertEqual(getattr(tobj, expectedattr), False)
                asyncore.readwrite(tobj, flag)

                # Only the attribute modified by the routine we expect to be
                # called should be True.
                for attr in attributes:
                    self.assertEqual(getattr(tobj, attr), attr == expectedattr)

                # check that ExitNow exceptions in the object handler method
                # bubbles all the way up through asyncore readwrite call
                tr1 = exitingdummy()
                self.assertRaises(asyncore.ExitNow, asyncore.readwrite, tr1,
                                  flag)

                # check that an exception other than ExitNow in the object handler
                # method causes the handle_error method to get called
                tr2 = crashingdummy()
                self.assertEqual(tr2.error_handled, False)
                asyncore.readwrite(tr2, flag)
                self.assertEqual(tr2.error_handled, True)
コード例 #5
0
    def test_readwrite(self):
        # Check that correct methods are called by readwrite()

        attributes = ('read', 'expt', 'write', 'closed', 'error_handled')

        expected = (
            (select.POLLIN, 'read'),
            (select.POLLPRI, 'expt'),
            (select.POLLOUT, 'write'),
            (select.POLLERR, 'closed'),
            (select.POLLHUP, 'closed'),
            (select.POLLNVAL, 'closed'),
            )

        class testobj:
            def __init__(self):
                self.read = False
                self.write = False
                self.closed = False
                self.expt = False
                self.error_handled = False

            def handle_read_event(self):
                self.read = True

            def handle_write_event(self):
                self.write = True

            def handle_close(self):
                self.closed = True

            def handle_expt_event(self):
                self.expt = True

            def handle_error(self):
                self.error_handled = True

        for flag, expectedattr in expected:
            tobj = testobj()
            self.assertEqual(getattr(tobj, expectedattr), False)
            asyncore.readwrite(tobj, flag)

            # Only the attribute modified by the routine we expect to be
            # called should be True.
            for attr in attributes:
                self.assertEqual(getattr(tobj, attr), attr==expectedattr)

            # check that ExitNow exceptions in the object handler method
            # bubbles all the way up through asyncore readwrite call
            tr1 = exitingdummy()
            self.assertRaises(asyncore.ExitNow, asyncore.readwrite, tr1, flag)

            # check that an exception other than ExitNow in the object handler
            # method causes the handle_error method to get called
            tr2 = crashingdummy()
            self.assertEqual(tr2.error_handled, False)
            asyncore.readwrite(tr2, flag)
            self.assertEqual(tr2.error_handled, True)
コード例 #6
0
ファイル: asyncevent.py プロジェクト: vjuranek/vdsm
 def _readwrite(self, fd, obj, flags):
     """
     Perform I/O on a ready dispatcher, if the dispatcher is till tracked by
     this event loop.
     """
     if self._channels.get(fd) is obj:
         # TODO: readwrite() is calling handle_xxx_event() on closed
         # dispatcher. This is fixed by this upstream patch:
         # https://github.com/python/cpython/pull/2854
         asyncore.readwrite(obj, flags)
コード例 #7
0
ファイル: asyncevent.py プロジェクト: nirs/vdsm
 def _readwrite(self, fd, obj, flags):
     """
     Perform I/O on a ready dispatcher, if the dispatcher is till tracked by
     this event loop.
     """
     if self._channels.get(fd) is obj:
         # TODO: readwrite() is calling handle_xxx_event() on closed
         # dispatcher. This is fixed by this upstream patch:
         # https://github.com/python/cpython/pull/2854
         asyncore.readwrite(obj, flags)
コード例 #8
0
ファイル: recipe-551774.py プロジェクト: bhramoss/code
    def _handle_io(self, obj, mask):
        asyncore.readwrite(obj, mask)

        # Make sure objects removed during the readwrite() aren't re-added
        if obj._fileno not in self._fd_map:
            return False

        # If read-/writability has changed, change watch mask
        if self._get_mask(obj) != self._watch_map[obj][1]:
            source_id = gobject.idle_add(self._add_watch, obj,
                                         priority=IO_PRIORITY)
            self._watch_map[obj] = (source_id, 'idle_add')
            return False

        return True
コード例 #9
0
    def _handle_io(self, obj, mask):
        asyncore.readwrite(obj, mask)

        # Make sure objects removed during the readwrite() aren't re-added
        if obj._fileno not in self._fd_map:
            return False

        # If read-/writability has changed, change watch mask
        if self._get_mask(obj) != self._watch_map[obj][1]:
            source_id = gobject.idle_add(self._add_watch,
                                         obj,
                                         priority=IO_PRIORITY)
            self._watch_map[obj] = (source_id, 'idle_add')
            return False

        return True
コード例 #10
0
    def test_readwrite(self):
        attributes = 'read', 'expt', 'write', 'closed', 'error_handled'
        expected = (select.POLLIN, 'read'), (select.POLLPRI, 'expt'), (
            select.POLLOUT, 'write'), (select.POLLERR,
                                       'closed'), (select.POLLHUP,
                                                   'closed'), (select.POLLNVAL,
                                                               'closed')

        class testobj:
            def __init__(self):
                self.read = False
                self.write = False
                self.closed = False
                self.expt = False
                self.error_handled = False

            def handle_read_event(self):
                self.read = True

            def handle_write_event(self):
                self.write = True

            def handle_close(self):
                self.closed = True

            def handle_expt_event(self):
                self.expt = True

            def handle_error(self):
                self.error_handled = True

        for flag, expectedattr in expected:
            tobj = testobj()
            self.assertEqual(getattr(tobj, expectedattr), False)
            asyncore.readwrite(tobj, flag)
            for attr in attributes:
                self.assertEqual(getattr(tobj, attr), attr == expectedattr)
            tr1 = exitingdummy()
            self.assertRaises(asyncore.ExitNow, asyncore.readwrite, tr1, flag)
            tr2 = crashingdummy()
            self.assertEqual(tr2.error_handled, False)
            asyncore.readwrite(tr2, flag)
            self.assertEqual(tr2.error_handled, True)
コード例 #11
0
def poll_epoll(timeout=-1, _socket_map=None):
    if _socket_map is None:
        _socket_map = socket_map

    if timeout is not None:
        # timeout is in seconds
        timeout = int(timeout)

    if _socket_map:
        epoll = select.epoll()

        for fd, obj in _socket_map.items():
            marks = 0
            if obj.readable():
                marks |= select.EPOLLET | select.EPOLLIN
            # accepting sockets should not be writable
            if obj.writable() and not obj.accepting:
                marks |= select.EPOLLET | select.POLLOUT
            if marks:
                # Only check for exceptions if object was either readable
                # or writable.
                marks |= select.EPOLLERR | select.EPOLLHUP
                epoll.register(fd, marks)

        try:
            events = epoll.poll(timeout=timeout)
        except socket.error, ex:
            if ex.errno != EINTR:
                raise
            events = {}

        for fd, event in events:
            dispatcher_obj = _socket_map.get(fd)
            if dispatcher_obj is None:
                continue
            readwrite(dispatcher_obj, event)
コード例 #12
0
ファイル: test_asyncore.py プロジェクト: Cinnz/python
        def test_readwrite(self):
            # Check that correct methods are called by readwrite()

            class testobj:
                def __init__(self):
                    self.read = False
                    self.write = False
                    self.closed = False
                    self.expt = False

                def handle_read_event(self):
                    self.read = True

                def handle_write_event(self):
                    self.write = True

                def handle_close(self):
                    self.closed = True

                def handle_expt_event(self):
                    self.expt = True

                def handle_error(self):
                    self.error_handled = True

            for flag in (select.POLLIN, select.POLLPRI):
                tobj = testobj()
                self.assertEqual(tobj.read, False)
                asyncore.readwrite(tobj, flag)
                self.assertEqual(tobj.read, True)

                # check that ExitNow exceptions in the object handler method
                # bubbles all the way up through asyncore readwrite call
                tr1 = exitingdummy()
                self.assertRaises(asyncore.ExitNow, asyncore.readwrite, tr1, flag)

                # check that an exception other than ExitNow in the object handler
                # method causes the handle_error method to get called
                tr2 = crashingdummy()
                asyncore.readwrite(tr2, flag)
                self.assertEqual(tr2.error_handled, True)

            tobj = testobj()
            self.assertEqual(tobj.write, False)
            asyncore.readwrite(tobj, select.POLLOUT)
            self.assertEqual(tobj.write, True)

            # check that ExitNow exceptions in the object handler method
            # bubbles all the way up through asyncore readwrite call
            tr1 = exitingdummy()
            self.assertRaises(asyncore.ExitNow, asyncore.readwrite, tr1, select.POLLOUT)

            # check that an exception other than ExitNow in the object handler
            # method causes the handle_error method to get called
            tr2 = crashingdummy()
            asyncore.readwrite(tr2, select.POLLOUT)
            self.assertEqual(tr2.error_handled, True)

            for flag in (select.POLLERR, select.POLLHUP, select.POLLNVAL):
                tobj = testobj()
                self.assertEqual((tobj.expt, tobj.closed)[flag == select.POLLHUP], False)
                asyncore.readwrite(tobj, flag)
                self.assertEqual((tobj.expt, tobj.closed)[flag == select.POLLHUP], True)

                # check that ExitNow exceptions in the object handler method
                # bubbles all the way up through asyncore readwrite calls
                tr1 = exitingdummy()
                self.assertRaises(asyncore.ExitNow, asyncore.readwrite, tr1, flag)

                # check that an exception other than ExitNow in the object handler
                # method causes the handle_error method to get called
                tr2 = crashingdummy()
                asyncore.readwrite(tr2, flag)
                self.assertEqual(tr2.error_handled, True)
コード例 #13
0
ファイル: asyncore_patch.py プロジェクト: rjsalts/ldmud
 def on_event(events):
     asyncore.readwrite(obj, events)
コード例 #14
0
        def test_readwrite(self):
            # Check that correct methods are called by readwrite()

            class testobj:
                def __init__(self):
                    self.read = False
                    self.write = False
                    self.closed = False
                    self.expt = False

                def handle_read_event(self):
                    self.read = True

                def handle_write_event(self):
                    self.write = True

                def handle_close(self):
                    self.closed = True

                def handle_expt_event(self):
                    self.expt = True

                def handle_error(self):
                    self.error_handled = True

            for flag in (select.POLLIN, select.POLLPRI):
                tobj = testobj()
                self.assertEqual(tobj.read, False)
                asyncore.readwrite(tobj, flag)
                self.assertEqual(tobj.read, True)

                # check that ExitNow exceptions in the object handler method
                # bubbles all the way up through asyncore readwrite call
                tr1 = exitingdummy()
                self.assertRaises(asyncore.ExitNow, asyncore.readwrite, tr1, flag)

                # check that an exception other than ExitNow in the object handler
                # method causes the handle_error method to get called
                tr2 = crashingdummy()
                asyncore.readwrite(tr2, flag)
                self.assertEqual(tr2.error_handled, True)

            tobj = testobj()
            self.assertEqual(tobj.write, False)
            asyncore.readwrite(tobj, select.POLLOUT)
            self.assertEqual(tobj.write, True)

            # check that ExitNow exceptions in the object handler method
            # bubbles all the way up through asyncore readwrite call
            tr1 = exitingdummy()
            self.assertRaises(asyncore.ExitNow, asyncore.readwrite, tr1,
                              select.POLLOUT)

            # check that an exception other than ExitNow in the object handler
            # method causes the handle_error method to get called
            tr2 = crashingdummy()
            asyncore.readwrite(tr2, select.POLLOUT)
            self.assertEqual(tr2.error_handled, True)

            for flag in (select.POLLERR, select.POLLHUP, select.POLLNVAL):
                tobj = testobj()
                self.assertEqual((tobj.expt, tobj.closed)[flag == select.POLLHUP], False)
                asyncore.readwrite(tobj, flag)
                self.assertEqual((tobj.expt, tobj.closed)[flag == select.POLLHUP], True)

                # check that ExitNow exceptions in the object handler method
                # bubbles all the way up through asyncore readwrite calls
                tr1 = exitingdummy()
                self.assertRaises(asyncore.ExitNow, asyncore.readwrite, tr1, flag)

                # check that an exception other than ExitNow in the object handler
                # method causes the handle_error method to get called
                tr2 = crashingdummy()
                asyncore.readwrite(tr2, flag)
                self.assertEqual(tr2.error_handled, True)
コード例 #15
0
ファイル: nodes.py プロジェクト: xxoolm/Ryven
 def update_event(self, inp=-1):
     self.set_output_val(0, asyncore.readwrite(self.input(0),
                                               self.input(1)))