python 은 차단 식 단일 프로 세 스,다 중 프로 세 스,다 중 스 레 드 서비스의 인 스 턴 스 를 간단하게 구축 합 니 다.

우 리 는 이러한 방식 을 통 해 apache 의 작업 원 리 를 이해 할 수 있다.
1.단일 프로 세 스 TCP 서비스(막힘 식)
이것 은 가장 원시 적 인 서비스 입 니 다.즉,하나의 클 라 이언 트 의 연결 만 처리 하고 현재 클 라 이언 트 가 닫 힌 후에 야 다음 클 라 이언 트 를 처리 할 수 있 습 니 다.이것 은 차단 식 대기 에 속 합 니 다.

from socket import *
serSocket = socket(AF_INET, SOCK_STREAM)
#         
serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1)

localAddr = ('', 7788)
serSocket.bind(localAddr)

serSocket.listen(5)

while True:
 print('-----D   ,        ------')
 newSocket,destAddr = serSocket.accept()
 print('-----D.   ,         [%s]-----'%str(destAddr))
 try:
  while True:
  recvData = newSocket.recv(1024)
  if len(recvData)>0:
   print('recv[%s]:%s'%(str(destAddr), recvData))
  else:
   print('[%s]       w...'%str(destAddr))
  break
 finally:
  newSocket.close()
이러한 차단 형 은 자 연 스 럽 게 다 중 클 라 이언 트 의 요청 을 처리 하기에 적합 하지 않 아서 개편 되 었 다.
2 다 중 프로 세 스 서비스
다 중 프로 세 스 로 다 중 클 라 이언 트 연결 요청 을 처리 하여 단일 프로 세 스 를 최적화 시 켰 습 니 다.

from socket import *
from multiprocessing import *
from time import sleep
#              
def dealWithClient(newSocket,destAddr):
 while True:
  recvData = newSocket.recv(1024)
  if len(recvData)>0:
   print('recv[%s]:%s'%(str(destAddr), recvData))
  else:
   print('[%s]       '%str(destAddr))
   break
 newSocket.close()
def main():
 serSocket = socket(AF_INET, SOCK_STREAM)
 serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1)
 localAddr = ('', 7788)
 serSocket.bind(localAddr)
 serSocket.listen(5)
 try:
  while True:
  print('-----   ,,         ------')
  newSocket,destAddr = serSocket.accept()
  print('-----   ,,     .           [%s]-----'
  client = Process(target=dealWithClient, args=(newSocket,destAddr))
  client.start()
  #     .   copy . ( .),  .              
  #    
  newSocket.close()
 finally:
  #               .  ,              
  serSocket.close()
 if __name__ == '__main__':
  main()
모든 클 라 이언 트 에 하나의 프로 세 스 를 만 드 는 방식 으로 여러 클 라 이언 트 에 게 동시에 서 비 스 를 제공 할 수 있 습 니 다.클 라 이언 트 가 특별히 많 지 않 을 때 이런 방식 은 괜 찮 습 니 다.수백 수천 개가 있 으 면 취 할 수 없습니다.프로 세 스 를 만 들 때마다 많은 자원 을 소모 하기 때문에 개선 판 이 있 습 니 다.
3 다 중 스 레 드 서비스
다 중 스 레 드 로 다 중 클 라 이언 트 연결 요청 을 처리 합 니 다.스 레 드 가 자원 을 공유 하기 때문에 프로 세 스 처럼 여러 자원 을 복사 하지 않 아 도 되 기 때문에 처리 가 빠 릅 니 다.

#coding=utf-8
from socket import *
from threading import Thread
from time import sleep

#            
def dealWithClient(newSocket,destAddr):
 while True:
  recvData = newSocket.recv(1024)
  if len(recvData)>0:
   print('recv[%s]:%s'%(str(destAddr), recvData))
  else:
   print('[%s]       '%str(destAddr))
   break
 newSocket.close()

def main():
 serSocket = socket(AF_INET, SOCK_STREAM)
 serSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR , 1)
 localAddr = ('', 7788)
 serSocket.bind(localAddr)
 serSocket.listen(5)
 try:
  while True:
   print('-----   ,,         ------')
   newSocket,destAddr = serSocket.accept()
   print('-----   ,,     .           [%s]-----'
   client = Thread(target=dealWithClient, args=(newSocket,destAddr))
   client.start()

   #      ,      ,             
   #newSocket.close()
 finally:
  serSocket.close()
if __name__ == '__main__':
main()
이상 의 python 은 차단 식 단일 프로 세 스,다 중 프로 세 스 를 간단하게 구축 합 니 다.다 중 스 레 드 서비스의 인 스 턴 스 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 할 수 있 고 여러분 들 이 저 희 를 많이 지지 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기