from http://www.codexon.com/posts/debunking-the-erlang-and-haskell-hype-for-servers
epoll.py

import select
import socket

EPOLLIN = select.EPOLLIN
EPOLLOUT = select.EPOLLOUT

epoll = select.epoll(60000)
connections = {}

class Server(object):
    def __init__ (self):
        sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        sock.setblocking(0)
        sock.bind(('', 8050))
        sock.listen(60000)
        self.socket = sock

        fileno = sock.fileno()
        connections[fileno] = self
        epoll.register(fileno, EPOLLIN)

    def onInput(self):
        sock, address = self.socket.accept()
        Client(sock)

class Client(object):
    input = ''
    output = "HTTP/1.0 200 OK\r\nContent-Length: 5\r\n\r\nPong!\r\n"

    def __init__ (self, sock):
        sock.setblocking(0)
        fileno = sock.fileno()
        epoll.register(fileno, EPOLLIN|EPOLLOUT)
        connections[fileno] = self
        self.socket = sock

    def onInput(self):
        newdata = self.socket.recv(1024)
        if len(newdata) is 0:
            self.close()
        self.input += newdata

    def onOutput(self):
        sent = self.socket.send(self.output)
        self.output = self.output[sent:]
        if len(self.output) is 0:
            self.close()

    def close(self):
        fileno = self.socket.fileno()
        del connections[fileno]
        epoll.unregister(fileno)
        self.socket.close()

Server()

while 1:
    for fd, event in epoll.poll():
        if event & EPOLLIN:
            connections[fd].onInput()

        if event & EPOLLOUT:
            connections[fd].onOutput()