WHERE_BE 2015-01-21 14:24 采纳率: 0%
浏览 3266

关于通过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条回答 默认 最新

  • oyljerry 2015-01-21 15:08
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥50 树莓派安卓APK系统签名
  • ¥15 maple软件,用solve求反函数出现rootof,怎么办?
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波