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 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效