def test(): # 创建协程,多协程公用一个proxy_client conf = config.Config() conf.set("client", "service", "python_test$EchoService") conf.set("client", "zk_connect_str", "172.18.1.22:2181") manager = client.Client(TutorialService.Client, conf) proxy_client = manager.create_proxy() def test_echo(msg): global error for i in xrange(req_num): try: proxy_client.echo(msg) except Exception, e: error += 1
def process(process_num): conf = config.Config() conf.set("client", "service", "python_test$EchoService") conf.set("client", "zk_connect_str", "172.18.1.22:2181") # 每个进程创建一个 client,多个线程公用一个client manager = client.Client(TutorialService.Client, conf) proxy_client = manager.create_proxy() jobs = [] def test(num): for i in range(0,req_num): try: proxy_client.echo(data) except Exception as e: print "request error: %s" %e thread_jobs = [] for j in range(0, threads): ttd = threading.Thread(target=test, args=(j,)) ttd.start() thread_jobs.append(ttd) for thread_job in thread_jobs: thread_job.join()
def phrase_detect(self, text, topN=7): d_res = {} res = phrase_detect_obj.process(text, topN) for (k, v) in res: d_res[k] = v return d_res def callback(): print '\n-----init server object phrase_detect-----\n' global phrase_detect_obj phrase_detect_obj = Phrase_Detection() def setLogger(): filename = "logs/server.log" return set_logger(filename) if __name__ == '__main__': branch = sys.argv[1] conf_path = 'etc/server.conf.' + branch conf = config.Config(conf_path) server_demo = server.GeventProcessPoolThriftServer(Processor, PhraseHander(), conf) server_demo.set_post_fork_callback(setLogger) server_demo.set_post_fork_callback(callback) print "\n*** Start server ***\n" server_demo.start()
def echo(self, msg): return msg #定义回调函数, harpc 采用的是多进程方式,此函数在创建进程的时候会进行调用, 具体可以参考thrift python 多进程server def callback(): filename = "./logs/serverdemo.log_%s" % os.getgid() logging.basicConfig( level=logging.DEBUG, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', filename=filename, filemode='w') if __name__ == '__main__': # setting config #conf = config.Config("./etc/demo_server.conf") conf = config.Config() # 创建配置文件类 conf.set("server", "service", "python_test$EchoService") #设置服务名,此服务名会在zk上注册 conf.set("server", "port", "9095") #设置server 的端口 conf.set("server", "zk_connect_str", "172.18.1.22:2181") #设置zk的连接地址 conf.set("server", "auth_user", "test") # 设置zk 的授权用户名 conf.set("server", "auth_password", "test") # 设置zk 的 授权密码 conf.set("server", "monitor", "True") # 设置是否监控server # TutorialService.Processor thrift生成的Processor, EchoServiceHandler 上面定义的handler, 此处和原生的thrift相同 server_demo = server.GeventProcessPoolThriftServer( TutorialService.Processor, EchoServiceHandler(), conf) server_demo.set_post_fork_callback(callback) #设置回调函数 server_demo.start() #启动服务
# -*- coding: utf-8 -*- import time import logging from tutorial import TutorialService # 导入thrift生成的service from bfd.harpc import client # 导入harpc 的client from bfd.harpc.common import config # 导入harpc 配置库 logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', filename='./logs/clientdemo.log', filemode='w') if __name__ == '__main__': # read config file conf = config.Config("./etc/demo_client.conf") #读取配置文件 # setting config use zk # conf = config.Config() # 初始化配置文件 # conf.set("client", "service", "python_test$EchoService") # 设置服务名,此处和server的相同 # conf.set("client", "zk_connect_str", "172.18.1.22:2181") # zk 连接地址 # setting config direct connect, 不通过zk 进行直连的方式连接server # conf = config.Config() # conf.set("client", "use_zk", "False") # conf.set("client", "direct_address", "127.0.0.1:9095") # ip:port 对应server的ip 和 端口 manager = client.Client(TutorialService.Client, conf) #TutorialService.Client thrift生成的Client proxy_client = manager.create_proxy() for i in range(0, 40): print proxy_client.echo("hello world!") time.sleep(0.1) manager.close()
def process(proxy_client, process_num): global error for i in range(0, req_num): try: proxy_client.echo(test_msg) except Exception as e: error = error + 1 print "request error %s" % e print("process_num:%s end" % process_num) if __name__ == '__main__': # read config file #conf = config.Config("./etc/demo_client.conf") # setting config use zk conf = config.Config() conf.set("client", "service", "python_test$EchoService") conf.set("client", "zk_connect_str", "172.18.1.22:2181") manager = client.Client(TutorialService.Client, conf) proxy_client = manager.create_proxy() jobs = [] # 创建多线程,多线程公用一个proxy_client start = time.time() for i in range(0, threads): td = threading.Thread(target=process, args=(proxy_client, i)) td.start() jobs.append(td) for job in jobs: job.join() end = time.time() req_time = end - start