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的实现

    评论

报告相同问题?

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?