def job_main(): beanstalk = create_beanstalk() print "Job queue starts..." try: while True: try: job = beanstalk.reserve() except beanstalkc.DeadlineSoon: continue request = json.loads(job.body) jobId = job.jid print 'Working on job %s...' % jobId try: jobType = request["jobType"] if jobType == TRAIN: category = request["category"] model = request["model"] trainer = Trainer.create(category, model) if trainer: data = {} data["table_name"] = request["inputTableName"] data["feature_names"] = request.get("features", None) data["target_name"] = request.get("target", None) ret = trainer.run(**data) print 'Job %s finished.' % jobId else: ret = [] print 'No trainer for job %s.' % jobId elif jobType == PREDICT: modelId = request["modelId"] predictor = Predictor(modelId) data = {} data["table_name"] = request["inputTableName"] ret = predictor.run(**data) print 'Job %s finished.' % jobId except: ret = [] print 'Error on job %s.' % jobId job.delete() #time.sleep(30) io_loop.add_callback(job_finished, jobId, ret) except (KeyboardInterrupt, SystemExit): beanstalk.close() sys.exit()