python 은 차단 식 단일 프로 세 스,다 중 프로 세 스,다 중 스 레 드 서비스의 인 스 턴 스 를 간단하게 구축 합 니 다.
3897 단어 python다 중 스 레 드다 중 프로 세 스
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 은 차단 식 단일 프로 세 스,다 중 프로 세 스 를 간단하게 구축 합 니 다.다 중 스 레 드 서비스의 인 스 턴 스 는 바로 작은 편집 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.참고 할 수 있 고 여러분 들 이 저 희 를 많이 지지 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.