Python 的用多进程处理客户端请求

2015-08-26 17:32:31 +08:00
 ivito
使用 Python 中 SocketServer 模块中的 ForkingMixIn 处理客户端请求,实现给客户端发送 PID 和时间功能
class ForkingServerHandler (SocketServer.BaseRequestHandler ):

def handle (self ):
data = self.request.recv (1024 )
current_pid = os.getpid ()
response = 'server pid: %s server time %s:' % (current_pid, server_time ())
print response
self.request.send (response )
return


class ForkingServer (SocketServer.TCPServer, SocketServer.ForkingMixIn,):
"""time server , return the server time to client"""
pass
但发现在本地开启了好几个客户端后服务端仍然只使用一个进程处理请求,为何?
2479 次点击
所在节点    Python
3 条回复
paw
2015-08-26 18:55:58 +08:00
class ForkingServer (SocketServer.TCPServer, SocketServer.ForkingMixIn,):
改成
class ForkingServer (SocketServer.ForkingMixIn, SocketServer.TCPServer ):

继承循序的问题
paw
2015-08-26 19:02:56 +08:00
PS :不推荐用自带库的这个 forkinng ,还不如下面来的方便
s = SocketServer.TCPServer (('', PORT ),HandlerClass )
for x in xrange (fork_process ):
pos = x
pid = os.fork ()
if pid == 0 :
break

s.serve_forever ()
PPS:学 python 网络,先把标准库的 SocketServer.py 读了,你的问题就在这文件的 614 行( python 2.7.9 )
ivito
2015-08-28 15:00:07 +08:00
@paw 非常感谢,解释完全正确,是继承顺序的问题。 SocketServer.py 写的确实很赞,几百行实现了一个服务器框架。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/216171

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX