Exemple #1
0
# -*- coding: utf-8 -*-
""" 使用python标准库的 ThreadingTCPServer
: 如果想用gevent, 可以用gevent patch all
"""
from SocketServer import ThreadingUnixStreamServer, StreamRequestHandler
from mprpc import RPCHandler


class SumHandler(RPCHandler):
    def sum(self, x, y):
        return x + y


class _Handler(StreamRequestHandler):
    def handle(self):
        SumHandler()(self.connection, None)


server = ThreadingUnixStreamServer('./x.sock', _Handler)
server.serve_forever()
Exemple #2
0
        sys.exit()

    sys.stdout.flush()
    sys.stderr.flush()
    si = file('/dev/null', 'r')
    so = file('/dev/null', 'a+')
    se = file('/dev/null', 'a+', 0)
    os.dup2(si.fileno(), sys.stdin.fileno())
    os.dup2(so.fileno(), sys.stdout.fileno())
    os.dup2(se.fileno(), sys.stderr.fileno())


if __name__ == '__main__':
    logger = configure_logging()

    # Socket server creates its own socket file. Delete if it exists already.
    if os.path.exists(SOCKET_FILENAME):
        logger.warning('Unlinking existing socket: %s' % SOCKET_FILENAME)
        os.unlink(SOCKET_FILENAME)

    server = ThreadingUnixStreamServer(SOCKET_FILENAME, GitHubPingHandler)

    os.chmod(SOCKET_FILENAME, 0777)
    try:
        logger.info('Starting Gitte socket server at: %s' % SOCKET_FILENAME)
        make_service()
        server.serve_forever()
    except KeyboardInterrupt:
        os.unlink(SOCKET_FILENAME)
        print "\nKeyboard interupt recieved, Gitte server stopping..."
Exemple #3
0
    def __init__(self, origin, branch='master', path='.', mount_point='.'):
        super(GitFS, self).__init__()
        self.origin = origin
        self.branch = branch
        self.root = os.path.realpath(path)
        self.mount_point = mount_point
        self.halt = False
        self.rwlock = Lock()
        self.need_sync_time = None
        # Can't use the default rlock here since we want to acquire/release from different threads
        self.sync_c = Condition(Lock())
        self.timer_c = Condition(Lock())

        self.id = None
        self.timer = None
        self.handlers = {
            'ping': self._handlePing,
            'lock': self._handleLock,
            'unlock': self._handleUnlock,
            'info': self._handleInfo,
            'getConfig': self._getConfig
        }
        self.lock_timer = None
        self.lock_lock = Condition()
        self.locks = {}
        self.lock_expire_time = time()

        self.control_dir = self.getControlDirectory()
        try:
            os.makedirs(self.control_dir)
        except OSError:
            pass

        self.info_dir = self.getInfoDirectory(self.root)
        try:
            os.makedirs(self.info_dir)
        except OSError:
            pass

        self.control_socket_path = self.getControlSocketPath(self.getID(),
                                                             server=True)
        self.lockGitFSDir()
        try:
            try:
                client = GitFSClient.getClientByPath(self.mount_point, False,
                                                     False)
                raise FuseOSError(EBUSY)

            except GitFSError:
                pass

            try:
                os.remove(self.control_socket_path)
            except OSError:
                pass

            self.control_server = None
            self.control_server = ThreadingUnixStreamServer(
                self.control_socket_path,
                type(
                    "GitFSRequestHandler",
                    (PacketizeMixIn, BaseRequestHandler, object),
                    dict(fs=self,
                         dictFromString=self.parseDict,
                         stringFromDict=self.marshalDict,
                         handleDict=lambda s, d: s.fs._handleRequest(s, d))))
            self.control_server.daemon_threads = True

            # setup the threads last so that they don't prevent an exit.
            self.control_thread = Thread(
                target=self.control_server.serve_forever, args=())
            self.control_thread.start()

        finally:
            self.unlockGitFSDir()

        mt = self.getMTab()
        mt[mount_point] = self.getID()
        self.updateMTab(mt)

        self.repo = GitRepo(path, origin, branch, sync=True)
        self.sync_thread = Thread(target=self._sync, args=())
        self.sync_thread.start()
Exemple #4
0
def return_unix(sock='spamd.sock'):
    """Return a unix SPAMD server"""
    if os.path.exists(sock):
        os.remove(sock)
    server = ThreadingUnixStreamServer(sock, TestSpamdHandler)
    return server