class Gearman_Manage(object): def __init__(self, host_list = ['0.0.0.0:5000']): """初始化服务端/客户端服务 """ self.logger = Logger(logname='log/log.txt', loglevel = 3, callfile = __file__).get_logger() try: self.server = Admin(host_list) self.client = Client(host_list) except: print "Gearman server host port is error!" self.logger.error("Dispatch a task name %s, %r" %(task_name, json_data)) sys.exit() def show_status(self): """查看server状态信息""" current_status = self.server.get_status() num = 0 for status in current_status: print status def get_worker(self, task_name = None): """查看worker端状态信息""" workers = [] for w in self.server.get_workers(): if w['tasks']: workers.append( w ) print "totla workers: %d" % (len(workers)) if not task_name: for i in workers: print "the IP:[%s]---Worker_name:[%s]---Task_name:[%s]"%(i['ip'],i['client_id'],i['tasks']) else: for i in workers: if task_name and i['tasks'][0] == task_name: print "the IP:[%s]---Worker_name:[%s]---Task_name:[%s]"%(i['ip'],i['client_id'],i['tasks']) return workers def send_task(self, task_name, json_data, priority=PRIORITY_NONE): """发送控制指令""" self.client.send_job(name=task_name, data=json.dumps(json_data), wait_until_complete=False, background=True, priority=priority) print ("Dispatch a task name %s, %r" %(task_name, json_data)) self.logger.info("Dispatch a task name %s, %r" %(task_name, json_data)) def clear_workers(self, task_name = None,priority = PRIORITY_HIGH): """关闭worker""" current_status = self.server.get_status() num = 0 if not task_name: print "I don't know which worker will be clear!" return if task_name == 'all': for status in current_status: num = 0 num = int(status['workers']) for i in range(num): self.send_task(status['task'], {'SHUTDOWN': True},priority) print "stop worker total:%d" % num else: for status in current_status: if status['task'] == task_name: num = int(status['workers']) print status for i in range(num): self.send_task(task_name,{'SHUTDOWN': True},priority) print "stop worker total:%d" % num if num == 0: print "Task list no have name is '%s' task!" % task_name return None def clear_server_list(self, task_name = None): """清理server job 队列""" current_status = self.server.get_status() if not task_name: print "I don't know clear which data list!" return if task_name == 'all': pass else: num = [i['queued'] for i in current_status if task_name == i['task']] print "the list len:%d" % num[0] self.server.empty_task(str(task_name)) def start_server(self, prot = 5000): """启动服务器""" self.server.start_server(prot) self.logger.info("start server.") def stop_server(self): """停止服务器""" try: self.server.send_shutdown() self.logger.info("stop server.") except: print "server is not run!" def ping_server(self): """查看服务器连通状况""" try: print self.server.get_response_time() except: print "server is not run!"
This progream is send clients. Options include: --version :0.1 --help:Input parameters async:is Asynchronous sync:is Synchronous stop:is send stop work,stop + task_name ''') if __name__=="__main__": handle = Send_Job_Client() try: IMPORT_MODULE = __import__(PLUGIN_NAME) except: print "no have this PLUGIN !" logger.error("no have this PLUGIN !") sys.exit() if not len(sys.argv) >= 2: How_Use() sys.exit() if sys.argv[1] != 'stop': threads = Double_Thread(True) threads.start() time.sleep(handle.update) assert isinstance(DATA_LIST, list) while 1: if not DATA_LIST and sys.argv[1] != 'stop': STATUS = -1