Python学习笔记(六)多进程实现并发服务器
2024-08-26 12:54:25
这个相对于多进程更加简单,每accept一个新的连接就创建一个新的线程。代码如下:
# coding: utf-8
import socket
import sys
import errno
import threading
from time import ctime class ClientThread(threading.Thread):
def __init__(self, client_socket, client_address):
threading.Thread.__init__(self)
self.client_socket = client_socket
self.client_address = client_address def run(self):
self.handle_connection() def handle_connection(self):
while True:
data = self.client_socket.recv(1024)
if not data:
print 'disconnect', self.client_address
self.client_socket.close()
break;
else:
self.client_socket.send('[%s] %s' % (ctime(), data)) #回显消息 if __name__ == '__main__':
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_address = ('localhost', 9981)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind(listen_address)
server_socket.listen(10) while True:
try:
(client_socket, client_address) = server_socket.accept()
except IOError, e:
if e.errno == errno.EINTR:
continue #继续等待
else:
raise #将异常向外throw
print 'Got connection from ', client_address
t = ClientThread(client_socket, client_address)
t.start()
注意这里的thread不能进行join,否则会阻塞主线程,丧失并发能力。
另外,python中的线程不需要进行detach。
最新文章
- wep.py输出hello world
- opencv删除二值图中较小的噪点色块
- Sql order by 和 group BY一起使用时需要注意
- win7下用mklink命令解决delphiXE系列占用C盘空间的问题
- JAVA测试装饰者模式
- tmux 配置
- Dictionary到List转换中的性能问题 转
- R语言——绘图函数深入学习
- Spark踩坑记——从RDD看集群调度
- 不用媒体查询做web响应式设计-遁地龙卷风
- Oracle SQL优化[转]
- 201521123010 《Java程序设计》第11周学习总结
- ssh密码
- 【微信小程序】
- 题解 P1801 【黑匣子_NOI导刊2010提高(06)】
- jQuery源码——.html()方法原理解析
- python 之模块random
- 了解java虚拟机—在TALB上分配对象(10)
- [UE4]时间轴线TimeLine,Lerp插值
- C# 模拟多线程下载文件