src/HOL/Tools/Sledgehammer/MaSh/src/server.py
author blanchet
Thu, 12 Sep 2013 10:35:33 +0200
changeset 53557 5d3ec1198a64
parent 53555 12251bc889f1
child 53789 8d9f4e89d8c8
permissions -rwxr-xr-x
commented out code parts leading to runtime errors due to missing gensim module
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
     1
#!/usr/bin/env python
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
     2
#     Title:      HOL/Tools/Sledgehammer/MaSh/src/server.py
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
     3
#     Author:     Daniel Kuehlwein, ICIS, Radboud University Nijmegen
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
     4
#     Copyright   2013
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
     5
#
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
     6
# The MaSh Server.
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
     7
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
     8
import SocketServer,os,string,logging
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
     9
from multiprocessing import Manager
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    10
from threading import Timer
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    11
from time import time
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    12
from dictionaries import Dictionaries
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    13
from parameters import init_parser
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    14
from sparseNaiveBayes import sparseNBClassifier
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    15
from KNN import KNN,euclidean
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    16
from KNNs import KNNAdaptPointFeatures,KNNUrban
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    17
from predefined import Predefined
53557
5d3ec1198a64 commented out code parts leading to runtime errors due to missing gensim module
blanchet
parents: 53555
diff changeset
    18
#from ExpandFeatures import ExpandFeatures
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    19
from stats import Statistics
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    20
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    21
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    22
class ThreadingTCPServer(SocketServer.ThreadingTCPServer): 
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    23
    def __init__(self, *args, **kwargs):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    24
        SocketServer.ThreadingTCPServer.__init__(self,*args, **kwargs)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    25
        self.manager = Manager()
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    26
        self.lock = Manager().Lock()
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    27
        self.idle_timeout = 28800.0 # 8 hours in seconds
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    28
        self.idle_timer = Timer(self.idle_timeout, self.shutdown)
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    29
        self.idle_timer.start()        
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    30
        
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    31
    def save(self):
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    32
        # Save Models
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    33
        self.model.save(self.args.modelFile)
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    34
        self.dicts.save(self.args.dictsFile)
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    35
        if not self.args.saveStats == None:
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    36
            statsFile = os.path.join(self.args.outputDir,self.args.saveStats)
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    37
            self.stats.save(statsFile)   
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    38
               
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    39
    def save_and_shutdown(self):     
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    40
        self.save()          
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    41
        self.shutdown()
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    42
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    43
class MaShHandler(SocketServer.BaseRequestHandler):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    44
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    45
    def init(self,argv):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    46
        if argv == '':
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    47
            self.server.args = init_parser([])
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    48
        else:
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    49
            argv = argv.split(';')
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    50
            self.server.args = init_parser(argv)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    51
        # Load all data
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    52
        self.server.dicts = Dictionaries()
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    53
        if os.path.isfile(self.server.args.dictsFile):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    54
            self.server.dicts.load(self.server.args.dictsFile)            
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    55
        elif self.server.args.init:
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    56
            self.server.dicts.init_all(self.server.args)
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    57
        # Pick model
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    58
        if self.server.args.algorithm == 'nb':
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    59
            self.server.model = sparseNBClassifier(self.server.args.NBDefaultPriorWeight,self.server.args.NBPosWeight,self.server.args.NBDefVal)
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    60
        elif self.server.args.algorithm == 'KNN':
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    61
            #self.server.model = KNN(self.server.dicts)
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    62
            self.server.model = KNNAdaptPointFeatures(self.server.dicts)
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    63
        elif self.server.args.algorithm == 'predef':
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    64
            self.server.model = Predefined(self.server.args.predef)
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    65
        else: # Default case
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    66
            self.server.model = sparseNBClassifier(self.server.args.NBDefaultPriorWeight,self.server.args.NBPosWeight,self.server.args.NBDefVal)
53557
5d3ec1198a64 commented out code parts leading to runtime errors due to missing gensim module
blanchet
parents: 53555
diff changeset
    67
#        if self.server.args.expandFeatures:
5d3ec1198a64 commented out code parts leading to runtime errors due to missing gensim module
blanchet
parents: 53555
diff changeset
    68
#            self.server.expandFeatures = ExpandFeatures(self.server.dicts)
5d3ec1198a64 commented out code parts leading to runtime errors due to missing gensim module
blanchet
parents: 53555
diff changeset
    69
#            self.server.expandFeatures.initialize(self.server.dicts)
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    70
        # Create Model
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    71
        if os.path.isfile(self.server.args.modelFile):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    72
            self.server.model.load(self.server.args.modelFile)          
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    73
        elif self.server.args.init:
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    74
            trainData = self.server.dicts.featureDict.keys()
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    75
            self.server.model.initializeModel(trainData,self.server.dicts)
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
    76
           
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    77
        if self.server.args.statistics:
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    78
            self.server.stats = Statistics(self.server.args.cutOff)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    79
            self.server.statementCounter = 1
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    80
            self.server.computeStats = False
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    81
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    82
        # Set up logging
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    83
        logging.basicConfig(level=logging.DEBUG,
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    84
                            format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    85
                            datefmt='%d-%m %H:%M:%S',
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    86
                            filename=self.server.args.log+'server',
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    87
                            filemode='w')    
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    88
        self.server.logger = logging.getLogger('server')
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    89
        self.server.logger.debug('Initialized in '+str(round(time()-self.startTime,2))+' seconds.')
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    90
        self.request.sendall('Server initialized in '+str(round(time()-self.startTime,2))+' seconds.')
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    91
        self.server.callCounter = 1
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    92
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    93
    def update(self):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    94
        problemId = self.server.dicts.parse_fact(self.data)    
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    95
        # Statistics
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    96
        if self.server.args.statistics and self.server.computeStats:
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    97
            self.server.computeStats = False
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    98
            # Assume '!' comes after '?'
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
    99
            if self.server.args.algorithm == 'predef':
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   100
                self.server.predictions = self.server.model.predict(problemId)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   101
            self.server.stats.update(self.server.predictions,self.server.dicts.dependenciesDict[problemId],self.server.statementCounter)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   102
            if not self.server.stats.badPreds == []:
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   103
                bp = string.join([str(self.server.dicts.idNameDict[x]) for x in self.server.stats.badPreds], ',')
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   104
                self.server.logger.debug('Poor predictions: %s',bp)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   105
            self.server.statementCounter += 1
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   106
53557
5d3ec1198a64 commented out code parts leading to runtime errors due to missing gensim module
blanchet
parents: 53555
diff changeset
   107
#        if self.server.args.expandFeatures:
5d3ec1198a64 commented out code parts leading to runtime errors due to missing gensim module
blanchet
parents: 53555
diff changeset
   108
#            self.server.expandFeatures.update(self.server.dicts.featureDict[problemId],self.server.dicts.dependenciesDict[problemId])
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   109
        # Update Dependencies, p proves p
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   110
        self.server.dicts.dependenciesDict[problemId] = [problemId]+self.server.dicts.dependenciesDict[problemId]
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   111
        self.server.model.update(problemId,self.server.dicts.featureDict[problemId],self.server.dicts.dependenciesDict[problemId])
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   112
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   113
    def overwrite(self):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   114
        # Overwrite old proof.
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   115
        problemId,newDependencies = self.server.dicts.parse_overwrite(self.data)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   116
        newDependencies = [problemId]+newDependencies
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   117
        self.server.model.overwrite(problemId,newDependencies,self.server.dicts)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   118
        self.server.dicts.dependenciesDict[problemId] = newDependencies
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   119
        
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   120
    def predict(self):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   121
        self.server.computeStats = True
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   122
        if self.server.args.algorithm == 'predef':
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   123
            return
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   124
        name,features,accessibles,hints,numberOfPredictions = self.server.dicts.parse_problem(self.data)
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   125
        if numberOfPredictions == None:
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   126
            numberOfPredictions = self.server.args.numberOfPredictions
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   127
        if not hints == []:
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   128
            self.server.model.update('hints',features,hints)
53557
5d3ec1198a64 commented out code parts leading to runtime errors due to missing gensim module
blanchet
parents: 53555
diff changeset
   129
#        if self.server.args.expandFeatures:
5d3ec1198a64 commented out code parts leading to runtime errors due to missing gensim module
blanchet
parents: 53555
diff changeset
   130
#            features = self.server.expandFeatures.expand(features)
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   131
        # Create predictions
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   132
        self.server.logger.debug('Starting computation for line %s',self.server.callCounter)
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   133
                
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   134
        self.server.predictions,predictionValues = self.server.model.predict(features,accessibles,self.server.dicts)
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   135
        assert len(self.server.predictions) == len(predictionValues)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   136
        self.server.logger.debug('Time needed: '+str(round(time()-self.startTime,2)))
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   137
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   138
        # Output        
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   139
        predictionNames = [str(self.server.dicts.idNameDict[p]) for p in self.server.predictions[:numberOfPredictions]]
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   140
        #predictionValues = [str(x) for x in predictionValues[:numberOfPredictions]]
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   141
        #predictionsStringList = ['%s=%s' % (predictionNames[i],predictionValues[i]) for i in range(len(predictionNames))]
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   142
        #predictionsString = string.join(predictionsStringList,' ')
53135
f08f66b55cb5 minor tweaks to MaSh tool
blanchet
parents: 53119
diff changeset
   143
        predictionsString = string.join(predictionNames,' ')
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   144
        outString = '%s: %s' % (name,predictionsString)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   145
        self.request.sendall(outString)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   146
    
53115
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   147
    def shutdown(self,saveModels=True):
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   148
        self.request.sendall('Shutting down server.')
53115
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   149
        if saveModels:
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   150
            self.server.save()
53115
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   151
        self.server.shutdown()
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   152
    
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   153
    def handle(self):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   154
        # self.request is the TCP socket connected to the client
53115
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   155
        self.data = self.request.recv(4194304).strip()
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   156
        self.server.lock.acquire()
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   157
        self.startTime = time()  
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   158
        if self.data == 'shutdown':
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   159
            self.shutdown()         
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   160
        elif self.data == 'save':
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   161
            self.server.save()       
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   162
        elif self.data.startswith('i'):            
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   163
            self.init(self.data[2:])
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   164
        elif self.data.startswith('!'):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   165
            self.update()
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   166
        elif self.data.startswith('p'):
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   167
            self.overwrite()
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   168
        elif self.data.startswith('?'):               
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   169
            self.predict()
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   170
        elif self.data == '':
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   171
            # Empty Socket
53119
ac18480cbf9d new version of MaSh tool, with more server bugfixes
blanchet
parents: 53115
diff changeset
   172
            self.server.lock.release()
ac18480cbf9d new version of MaSh tool, with more server bugfixes
blanchet
parents: 53115
diff changeset
   173
            return
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   174
        elif self.data == 'avgStats':
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   175
            self.request.sendall(self.server.stats.printAvg())            
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   176
        else:
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   177
            self.request.sendall('Unspecified input format: \n%s',self.data)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   178
        self.server.callCounter += 1
53555
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   179
        # Update idle shutdown timer
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   180
        self.server.idle_timer.cancel()
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   181
        self.server.idle_timer = Timer(self.server.idle_timeout, self.server.save_and_shutdown)
12251bc889f1 new version of MaSh
blanchet
parents: 53135
diff changeset
   182
        self.server.idle_timer.start()        
53115
e08a58161bf1 new version of MaSh tool, with less broken server
blanchet
parents: 53100
diff changeset
   183
        self.server.lock.release()
53100
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   184
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   185
if __name__ == "__main__":
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   186
    HOST, PORT = "localhost", 9255
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   187
    SocketServer.TCPServer.allow_reuse_address = True
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   188
    server = ThreadingTCPServer((HOST, PORT), MaShHandler)
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   189
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   190
    # Activate the server; this will keep running until you
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   191
    # interrupt the program with Ctrl-C
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   192
    server.serve_forever()        
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   193
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   194
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   195
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   196
    
1133b9e83f09 new version of MaSh tool -- experimental server
blanchet
parents:
diff changeset
   197
    
53557
5d3ec1198a64 commented out code parts leading to runtime errors due to missing gensim module
blanchet
parents: 53555
diff changeset
   198