# -*- 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()
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..."
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()
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