关于通过forkingMixin实现python 多进程的疑惑

网上说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()
对进程,通信这方面很不熟悉。。希望大家多多指教

2个回答

serve_forever这里是创建线程来做一个侦听,接收处理请求,
具体是不是多进程,你要看ForkingMixin的实现

oyljerry
oyljerry 回复qq_20339669: 你先看SocketServer.ForkingMixIn的函数实现
5 年多之前 回复
qq_20339669
WHERE_BE 多谢。。。不过就像你说的这样,我还是不清楚ForkingMixIn是如何实现的呢,比如在源代码中是哪些部分体现出来了。。。
5 年多之前 回复

同新手请教,当时我写的时候把handle函数的线程号也记下来并打印出来结果发现如果server继承的是forkingMixIn,那么虽然有threading.Thread这个函数但还是发现每次处理线程号是相同的,
换成继承threadingMixin才是每次处理的线程号不一样,感觉真奇怪

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐