网上说python利用FokingMixIn实现多进程, 在下再看一段源代码时,有些许疑惑
源代码中中除了引入包含有forkingMixIn类的socket.server模块,还引入了theading这个模块
在重写handle函数并实例化服务器对象后,它这么做:server_thread=hreading.Thread(target=server.serve_forever)
在网上查,似乎是将操作委托给一个线程(可能是我理解有误。。)但这让我更加迷糊了,我想问一下各位到底forkingMixIn类是如何处理多进程的,与threading之间有什么关系呢?代码如下:)
/usr/sbin/mypython
import socket
import SocketServer
import os
import threading
sip='localhost'
sport=0
class forkingclient:
def init(self,ip,port):
self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
self.sock.connect((ip,port))
def run(self):
clientprocess_pid=os.getpid()
data = 'hello server'
print 'client %s send %s to server' %(clientprocess_pid,data)
self.sock.send(data)
newdata=self.sock.recv(1024)
print newdata
def shutdown(self):
self.sock.close()
class myhandle(SocketServer.BaseRequestHandler):
def handle(self):
data=self.request.recv(1024)
server_current_pid=os.getpid()
print server_current_pid
print '%s receive from client is %s' %(server_current_pid,data)
newdata = ' i am server and your data is ' +data
self.request.send(newdata)
print server_current_pid
class forkingserver(SocketServer.TCPServer,SocketServer.ForkingMixIn):
pass
def main():
server=forkingserver((sip,sport),myhandle)
ip,port=server.server_address
server_thread=threading.Thread(target=server.serve_forever)
server_thread.setDaemon(True)
server_thread.start()
client1=forkingclient(ip,port)
client1.run()
client2=forkingclient(ip,port)
client2.run()
client3=forkingclient(ip,port)
client3.run()
main()
对进程,通信这方面很不熟悉。。希望大家多多指教