Python Intro - select.epoll

 

https://www.programcreek.com/python/example/3782/select.epoll

 

Python select.epoll Examples

The following are 20 code examples for showing how to use select.epoll. They are extracted from open source Python projects. You can click vote to vote up the examples you like, or click vote to vote down the exmaples you don't like. Your votes will be used in our system to extract more high-quality examples.

You may also check out all available functions/classes of the module select , or try the search function .

 

Example 1

From project elements, under directory lib/elements/async, in source file event.py.

Score: 22
vote
vote
def __init__ (self, server):
        """
        Create a new EPollEventManager instance.

        @param server (Server) The Server instance under which this EPollEventManager is being created.
        """

        PollEventManager.__init__(self, server)

        self._poll = select.epoll()

        self.EVENT_ERROR  = select.EPOLLERR
        self.EVENT_READ   = select.EPOLLIN | select.EPOLLPRI
        self.EVENT_WRITE  = select.EPOLLOUT
        self.EVENT_LINGER = select.EPOLLHUP

# ----------------------------------------------------------------------------------------------------------------------

Example 2

From project mandimus-master, under directory , in source file MainThread.py.

Score: 13
vote
vote
def __init__(self):
        # this needs to run before any user modes are imported
        self.epoll = select.epoll()
        self.timers = []
        EventLoop.event_loop = self        

        self.run = True
        self.events = collections.deque()
        self.eventsLock = Lock()
        self.eventSubscribers = {}
        self.fileSubscribers = {}

        self.dfly = DragonflyThread(('', 23133), self)
        self.win = WindowEventWatcher(self, filterWindows)
        
        self.subscribeEvent(RestartEvent, self.restart)
        self.subscribeEvent(ExitEvent, self.stop)
        
        mapping = { "restart mandimus" : (lambda x: self.put(RestartEvent())),
                    "completely exit mandimus" : (lambda x: self.put(ExitEvent())) }
        self.MainControlRule = makeContextualRule("MainControlRule", mapping, ruleType=RuleType.INDEPENDENT)
        self.MainControlRule.activate()

Example 3

From project ideerfs, under directory , in source file epoll_server.py.

Score: 13
vote
vote
def mainloop(self):
        self.socket.setblocking(0) # Non blocking socket server
        self.clients = {}

        self.epoll = select.epoll()
        self.epoll.register(self.socket.fileno(), select.EPOLLIN) # Level triggerred

        while True:
            if self.shutdown: # Gracefully shutdown
                break
            events = self.epoll.poll(1) # Timeout 1 second
            for fileno, event in events:
                try:
                    if fileno == self.socket.fileno(): # New connection on server socket
                        self.accept_clients()
                    elif event & select.EPOLLIN: # Although it's level triggerred, read or write as more as possible
                        self.epoll_in(fileno)
                    elif event & select.EPOLLOUT:
                        self.epoll_out(fileno)
                    elif event & select.EPOLLHUP:
                        self.epoll_hup(fileno)
                except socket.error, err:
                    debug('epoll event exception: %s', err)
                    if err.errno == 11: # Catch the Errno
                        pass
                    else:
                        raise

        self.epoll.unregister(self.socket.fileno())
        self.epoll.close()
        self.socket.close()

Example 4

From project adv-net-samples-master, under directory sdn/pox/pox/lib, in source file epoll_select.py.

Score: 10
vote
vote
def __init__(self):
    self.epoll = select.epoll()
    self.fd_to_obj = {}
    self.registered = {}
    self.lastrl = []
    self.lastrl_set = set()
    self.lastwl = []
    self.lastwl_set = set()

Example 5

From project ScratchABit-master, under directory curses, in source file __init__.py.

Score: 10
vote
vote
def getch(self):
        if self.keybuf and self.keyi < len(self.keybuf):
            c = self.keybuf[self.keyi]
            self.keyi += 1
            return c

        if self.keydelay >= 0:
            USE_EPOLL = 1
            if USE_EPOLL:
                poll = select.epoll()
                poll.register(0, select.EPOLLIN)
                res = poll.poll(self.keydelay / 1000)
                poll.unregister(0)
                poll.close()
            else:
                res = select.select([0], [], [], self.keydelay / 1000)[0]
            if not res:
                return -1

        key = os.read(0, 32)
        if key[0] != 0x1b:
            self.keybuf = key
            self.keyi = 1
            key = key[0]

        else:
            if key in KEYMAP:
                key = KEYMAP[key]
            else:
                assert False, repr(key)
        return key


 

Example 6

From project corrosion, under directory src/corrosion/core, in source file scheduler.py.

Score: 10
vote
vote
def __init__(self):
        self._epoll = select.epoll()
        self._tasks = {}
        self._ready_queue = Queue()
        self._waiting_read = {}
        self._waiting_write = {}
        self._waiting_end = {}

Example 7

From project ideerfs, under directory bak, in source file aio.py.

Score: 10
vote
vote
def __init__(self):
        self.io_queue = {}
        self.shutdown = False
        self.epoll = select.epoll()
        thread.start_new_thread(self._mainloop, ())

Example 8

From project diesel, under directory diesel, in source file hub.py.

Score: 10
vote
vote
def __init__(self):
        self.epoll = select.epoll()
        self.signal_handlers = defaultdict(deque)
        super(EPollEventHub, self).__init__()

Example 9

From project Testify, under directory testify/plugins, in source file violation_collector.py.

Score: 10
vote
vote
def _setup_pipe(self):
        """Setup a pipe to enable communication between parent and
        traced child processes.

        Adding tests and adding violations to the database is done
        through different processes. We use this pipe to update the
        last test id to be used while inserting Violations. Although
        it is possible to get it from the database we'll use the pipe
        not to make a db query each time we add a violation (and would
        really work when there is multiple builders writing to the
        database).
        """
        self.test_id_read_fd, self.test_id_write_fd = os.pipe()

        if fcntl:
            fcntl.fcntl(self.test_id_read_fd, fcntl.F_SETFL, os.O_NONBLOCK)
        self.epoll = select.epoll()
        self.epoll.register(self.test_id_read_fd, select.EPOLLIN | select.EPOLLET)

Example 10

From project IncPy, under directory Lib/test, in source file test_epoll.py.

Score: 10
vote
vote
def test_badcreate(self):
        self.assertRaises(TypeError, select.epoll, 1, 2, 3)
        self.assertRaises(TypeError, select.epoll, 'foo')
        self.assertRaises(TypeError, select.epoll, None)
        self.assertRaises(TypeError, select.epoll, ())
        self.assertRaises(TypeError, select.epoll, ['foo'])
        self.assertRaises(TypeError, select.epoll, {})

Example 11

From project pycopia-master, under directory QA/pycopia/remote, in source file pyro.py.

Score: 10
vote
vote
def __init__(self, pyrodaemon):
        self._pyrod = pyrodaemon
        self._poller = select.epoll()
        self.smap = {}
        self.update()

Example 12

From project pycopia-master, under directory core/pycopia, in source file asyncio.py.

Score: 10
vote
vote
def __init__(self):
        self.smap = {}
        self._fd_callbacks = {}
        self._idle_callbacks = {}
        self._idle_handle = 0
        self.pollster = select.epoll()
        self.closed = False
        fd = self.pollster.fileno()
        flags = fcntl.fcntl(fd, fcntl.F_GETFD)
        flags |= fcntl.FD_CLOEXEC
        fcntl.fcntl(fd, fcntl.F_SETFD, flags)

Example 13

From project exp, under directory , in source file udp2tcp.py.

Score: 8
vote
vote
def do_server(port, host_tr_spec):
    host_tr = { }
    for src, dst in host_tr_spec:
        host_tr[ ip_int(src) ] = dst

    def unpack(dat):
        hdr_len = struct.calcsize(ADDR_FMT)
        host_int, port = struct.unpack(ADDR_FMT, dat[ :hdr_len])
        return (host_int, port, dat[hdr_len: ])

    svr_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    svr_sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
    svr_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    svr_sock.bind(("localhost", port))
    svr_sock.listen(1)
    conn, addr = svr_sock.accept()
    print("The tunnel conn with {} was established.".format(addr))

    udp_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    udp_sock.bind(("0.0.0.0", 223))
    fd2s = { }

    epoll = select.epoll()
    conn_fd = conn.fileno()
    epoll.register(conn_fd, select.EPOLLIN)

    fd = udp_sock.fileno()
    epoll.register(fd, select.EPOLLIN)
    fd2s[fd] = udp_sock

    while True:
        evts = epoll.poll(10)
        for fd, evt in evts:
            if evt & select.EPOLLIN:
                if fd in fd2s:
                    s = fd2s[fd]
                    dat = s.recv(LONG_ENOUGH)
                    conn.send(dat)
                elif fd == conn_fd:
                    dat = conn.recv(LONG_ENOUGH)
#                       host_int, port, dat = unpack(dat)
#                   host = host_tr[host_int]
                    udp_sock.sendto(dat, ("127.0.0.1", 123))
#                   udp_sock.sendto(dat, ("202.150.213.154", 123))
                else:
                    print("??? {}".format((fd, evt)))
            elif evt & (select.EPOLLHUP | select.EPOLLERR):
                if fd == conn_fd:
                    sys.stderr.write("{} TCP tunnel was terminated.".format(
                        datetime.datetime.now().strftime("%H:%M:%S.%f")))
                    epoll.close()
                    tcp.close()
                    for fd, s in fd2s.iteritems():
                        s.close()
                    return
                else:
                    print("??? {}".format((fd, evt)))
        time.sleep(1e-2)

Example 14

From project informatics-rescue-notes, under directory src/network, in source file echo-server-epoll.py.

Score: 8
vote
vote
def main():
    args = aux.parse_args('Echo server with epoll-processing model.')
    server_socket = aux.listening_socket(args.port)
    server_fileno = server_socket.fileno()

    fileno_to_data = {}
    fileno_to_socket = {}

    read_epoll = select.epoll()
    read_epoll.register(server_fileno, select.EPOLLIN)

    while True:
        for fileno, eventmask in read_epoll.poll(0.05):
            if fileno == server_fileno:
                client_socket, _ = server_socket.accept()
                client_fileno = client_socket.fileno()

                fileno_to_data[client_fileno] = ''
                fileno_to_socket[client_fileno] = client_socket

                read_epoll.register(client_fileno, select.EPOLLIN)
            else:
                client_socket = fileno_to_socket[fileno]

                data = client_socket.recv(1024)
                if not data:
                    read_epoll.unregister(fileno)
                    del fileno_to_data[fileno]
                    del fileno_to_socket[fileno]
                    client_socket.close()
                else:
                    fileno_to_data[fileno] += data

        check_writability = [f for f, d in fileno_to_data.iteritems() if d]
        if not check_writability:
            continue

        write_epoll = select.epoll()
        for fileno in check_writability:
            write_epoll.register(fileno, select.EPOLLOUT)

        for fileno, eventmask in write_epoll.poll(0.05):
            if eventmask & (select.EPOLLERR | select.EPOLLHUP):
                read_epoll.unregister(fileno)
                fileno_to_socket[fileno].close()
                del fileno_to_data[fileno]
                del fileno_to_socket[fileno]
                continue

            client_socket = fileno_to_socket[fileno]
            data = fileno_to_data[fileno]

            n = client_socket.send(data)
            if n > 0:
                fileno_to_data[fileno] = data[n:]

        write_epoll.close()

Example 15

From project dvsmon, under directory , in source file dvs-mon.py.

Score: 8
vote
vote
def __init__(self, command, stdout, stderr, callback):
        threading.Thread.__init__(self)
        # We terminate when the program terminates
        self.setDaemon(True)

        KILLME.append(self)

        self._status = []
        self.status("STARTING")

        # Move the subprocess into it's own process group
        def new_process_group():
            import os
            os.setpgrp()

        # Create the output process
        self.process = subprocess.Popen(
            command,
            stdout = subprocess.PIPE,
            stderr = subprocess.PIPE,
            shell = True,
            preexec_fn = new_process_group,
            )

        # Wait for the process to move into it's own process group, then capture
        # the process group.
        while True:
            self.process_group = os.getpgid(self.process.pid)
            if self.process_group == os.getpgid(0):
                continue
            break

        self.epoll = select.epoll()
        self.fd_to_output = {}

        self.callback = callback

        self.register(self.process.stdout, stdout)
        self.register(self.process.stderr, stderr)

        self.status("RUNNING")

Example 16

From project mozbuilds, under directory mozilla-build/python/Lib/test, in source file test_epoll.py.

Score: 7
vote
vote
def test_badcreate(self):
        self.assertRaises(TypeError, select.epoll, 1, 2, 3)
        self.assertRaises(TypeError, select.epoll, 'foo')
        self.assertRaises(TypeError, select.epoll, None)
        self.assertRaises(TypeError, select.epoll, ())
        self.assertRaises(TypeError, select.epoll, ['foo'])
        self.assertRaises(TypeError, select.epoll, {})

Example 17

From project dnsproxy-master, under directory , in source file eventloop.py.

Score: 5
vote
vote
def __init__(self):
        self._epoll = select.epoll()

Example 18

From project lyar-master, under directory tornado/platform, in source file epoll.py.

Score: 5
vote
vote
def initialize(self, **kwargs):
        super(EPollIOLoop, self).initialize(impl=select.epoll(), **kwargs)

Example 19

From project ubuntu-sdk-app-python-template-master, under directory lib/python3.4, in source file selectors.py.

Score: 5
vote
vote
def __init__(self):
            super().__init__()
            self._epoll = select.epoll()

Example 20

From project fastsnmp-master, under directory fastsnmp, in source file snmp_poller.py.

Score: 5
vote
vote
def poller(hosts, oids_groups, community, check_timeout=10, check_retry=1):
    """
    A generator that yields SNMP data

    :param hosts: hosts
    :param oids_groups: oids_groups
    :param community: community
    :type hosts: list | tuple
    :type oids_groups: list | tuple
    :type community: str
    :return: host, main_oid, index_part, value
    :rtype: tuple
    """
    job_queue = queue.Queue()
    reqid_offset_len = 6  # last nth rank used for offset
    rand_number = random.randint(1, 999)
    start_reqid = rand_number * (10 ** reqid_offset_len)
    socksize = 0x200000
    pending_querys = collections.defaultdict(list)
    retried_req = collections.defaultdict(int)
    global_target_varbinds = {}
    query_reqid = start_reqid

    # preparation of targets

    for oids_group in oids_groups:
        oids_to_poll = main_oids = oids_group
        global_target_varbinds[query_reqid] = (oids_to_poll, main_oids)
        query_reqid += 1000000

    reqid_to_msg = {}
    target_info = {}
    pending_query = {}
    target_info_r = {}
    bad_hosts = []
    for host in hosts:
        try:
            host_ip = socket.gethostbyname(host)  # TODO: bottleneck
        except socket.gaierror:
            logger.error("unable to resolve %s. skipping this host" % host)
            bad_hosts.append(host)
            continue
        target_info[host_ip] = host
        target_info_r[host] = host_ip
    for reqid in global_target_varbinds.keys():
        for host in hosts:
            if host in bad_hosts:
                continue
            host_ip = target_info_r[host]
            job_queue.put((host_ip, reqid))

    # preparation of sockets
    socket_map = {}
    epoll = select.epoll()
    socket_count = min((MAX_SOCKETS_COUNT, len(hosts) - len(bad_hosts)))
    for _ in range(socket_count):
        new_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        new_sock.bind(('0.0.0.0', 0))
        socket_map[new_sock.fileno()] = new_sock
        epoll.register(new_sock, select.EPOLLOUT)

    # main loop
    while True:
        try:
            events = epoll.poll(0.1)
            for fileno, event in events:
                if event & select.EPOLLOUT:
                    fdfmt = select.EPOLLIN
                    if not job_queue.empty():
                        host, pdudata_reqid = job_queue.get()
                        oids_to_poll, main_oids = global_target_varbinds[pdudata_reqid]
                        if pdudata_reqid in reqid_to_msg:
                            message = reqid_to_msg[pdudata_reqid]
                        else:
                            message = snmp_parser.msg_encode(pdudata_reqid, community, oids_to_poll, max_repetitions=20)
                            reqid_to_msg[pdudata_reqid] = message
                        socket_map[fileno].sendto(message, (host, 161))
                        pending_querys[host].append(pdudata_reqid)

                        pending_query[(host, pdudata_reqid)] = time()

                        if DEBUG:
                            logger.debug('sendto %s %s reqid=%s' % (host, oids_to_poll, pdudata_reqid))
                        job_queue.task_done()
                    if not job_queue.empty():
                        fdfmt = fdfmt | select.EPOLLOUT
                    #fdfmt = fdfmt | select.EPOLLOUT
                    epoll.modify(fileno, fdfmt)
                elif event & select.EPOLLIN:
                    data, remotehost = socket_map[fileno].recvfrom(socksize)
                    host_ip = remotehost[0]
                    pdudata_reqid, error_status, error_index, var_bind_list = snmp_parser.msg_decode(data)
                    if error_status:
                        logger.error('%s get error_status %s at %s. query=%s',
                                     target_info[host_ip],
                                     error_status, error_index,
                                     global_target_varbinds[pdudata_reqid][0])
                    if DEBUG:
                        logger.debug('%s recv reqid=%s' % (host_ip, pdudata_reqid))
                    oids_to_poll, main_oids = global_target_varbinds[pdudata_reqid]
                    try:
                        del pending_query[(host_ip, pdudata_reqid)]
                    except KeyError:
                        continue  # dup
                    interested_oids = True
                    for oid, value in var_bind_list:
                        if value is None:
                            interested_oids = False
                            break
                        found = False
                        for main_oid in main_oids:
                            if oid.startswith(main_oid + '.'):
                                found = True
                                index_part = oid[len(main_oid) + 1:]
                                yield (target_info[host_ip], main_oid, index_part, value)
                                break
                        if not found:
                            if DEBUG:
                                logger.debug('skip %s %s=%s, reqid=%s. Not found in %s' % (host_ip, oid, value, pdudata_reqid, main_oids))
                            interested_oids = False
                            break
                    base_req_id = make_base_reqid(pdudata_reqid, reqid_offset_len)
                    if interested_oids:
                        oids_to_poll = []
                        new_req_id = base_req_id + int(str(hash(index_part))[-reqid_offset_len:])
                        if DEBUG:
                            logger.debug('new_req_id = %s' % new_req_id)
                        for target_oid in main_oids:
                            new_target_oid = "%s.%s" % (target_oid, index_part)
                            oids_to_poll.append(new_target_oid)

                        global_target_varbinds[new_req_id] = (oids_to_poll, main_oids)
                        job_queue.put((host_ip, new_req_id))
                    else:
                        if DEBUG:
                            logger.error('found not interested in oid=%s host=%s' % (oid, host_ip))

                    epoll.modify(fileno, select.EPOLLOUT | select.EPOLLIN)
                elif event & select.EPOLLERR:
                    logger.critical('socket error')
                    raise Exception('epoll error')
            if not events and job_queue.empty() and not pending_query:
                break

            if pending_query:  # check timeouts
                cur_time = time()
                timeouted_querys = []
                for query, query_time in pending_query.items():
                    if cur_time - query_time > check_timeout:
                        timeouted_querys.append(query)
                        logger.info('timeout %s %s' % query)
                for timeouted_query in timeouted_querys:
                    if timeouted_query not in retried_req or retried_req[timeouted_query] < check_retry:
                        logger.debug('resend %s %s' % timeouted_query)
                        job_queue.put(timeouted_query)
                        retried_req[timeouted_query] += 1
                    else:
                        logger.warning("%s query timeout for OID's: %s",
                                       target_info[timeouted_query[0]],
                                       global_target_varbinds[timeouted_query[1]][0])
                    del pending_query[timeouted_query]
            if not job_queue.empty():
                sockets_write_count = min(job_queue.qsize(), len(socket_map))
                for sock in list(socket_map.values())[0:sockets_write_count]:
                    epoll.modify(sock, select.EPOLLOUT | select.EPOLLIN)

        except InterruptedError:  # signal in syscall. supressed by default on python 3.5
            pass

posted on 2017-09-27 18:18  fanbird2008  阅读(163)  评论(0)    收藏  举报

导航