首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

使用中学习python多线程和socket编程

2013-07-08 
应用中学习python多线程和socket编程def run(self):global query_lock,query_list,server_list,server_pos

应用中学习python多线程和socket编程
def run(self): global query_lock,query_list,server_list,server_pos,server_max while True: if query_lock.acquire(): try: query = query_list.pop(0) #轮询服务器 ip,port = server_list[server_pos] server_pos = server_pos + 1 if server_pos == server_max: server_pos = 0 except IndexError: query_lock.release() break; query_lock.release() sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect((ip,port)) sock.send(query) res = sock.recv(1024) sock.close() print res.replace('\n','')

?

服务器端server.py:

path_dir = sys.path[0]sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.bind((socket.gethostbyname(socket.gethostname()),9710))sock.listen(10)while True:    connection,address = sock.accept()    try:            connection.settimeout(60)        line = connection.recv(1024)        arrs = line.split()        if len(arrs) == 2:             table = arrs[0]              url = arrs[1]              cmd = "sh " + path_dir + "/seek_hst.sh " + table + " " + url             sub_p = subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT);              result = "";              buff = "";              while True:                   buff = sub_p.stdout.readline();                   result += buff;                   if buff == '':                       break;                result = result.replace('\n','');              connection.send(result);          else:                 connection.send('please go out!')     except socket.timeout:         print 'time out'     connection.close()

?

这是目前的简略版,写起来后各种不同的想法涌现出来,目前想到可以改进的地方:

1. client端连接服务器及端口的配置动态化

2. 可控的超时控制,进一步设计在socket连接上构建自己的协议包内容

3. 服务器端的多线程处理,select及epoll方式的异步IO

?

热点排行