Python Process Pool이 동시 TCP 요청을 처리하고 클라이언트가 막히게하는 이유는 무엇입니까?
동시 TCP 요청을 처리하고 클라이언트 재밍을 처리하기위한 Python 프로세스 풀의 근본 원인과 솔루션
이 기사는 Python Process Pool을 사용하여 동시 TCP 요청을 처리하고 효과적인 솔루션을 제공 할 때 클라이언트가 고정 될 수있는 이유를 분석합니다.
문제 : 서버는 multiprocessing.Pool
사용하여 TCP 요청을 처리하기위한 프로세스 풀을 만듭니다. 클라이언트는 ThreadPoolExecutor
사용하여 요청을 동시에 보냅니다. MACOS 시스템에서 클라이언트 스레드 풀 max_workers
가 1보다 클 때 클라이언트가 붙어 있습니다. 그러나 일반적으로 우분투 시스템에서 실행됩니다. 서버 코드는 pool.apply_async
사용하여 작업을 할당하지 않으며 차단 문제가없는 것 같습니다.
근본 원인 : 서버 코드는 socket
객체를 자식 프로세스로 직접 전달합니다. socket
객체를 프로세스간에 직접 공유 할 수 없으므로 socket
객체를 복사하려고 할 때 하위 프로세스가 실패하여 하위 프로세스가 제대로 작동하지 않고 클라이언트 요청을 차단합니다.
솔루션 : socket
객체를 직접 통과하지 말고 파일 설명자 (파일 설명자)를 전달하십시오.
향상된 서버 코드 :
OS 가져 오기 소켓 수입 SYS 가져 오기 수입 시간 스레딩 가져 오기 Loguru 가져 오기 로거에서 Concurrent에서 Futures import ThreadPoolexecutor를 가져옵니다 Concurrent.Futures._Base 가져 오기 미래 다중 프로세싱 수입 default_encoding : str = 'utf-8' def init_serversocket () -> socket.socket : # ... (코드는 원래 질문 설명과 동일) ... ... def send_response (clientsocket : socket.socket, addr : tuple, response_body : bytes) -> int : # ... (코드는 원래 질문 설명과 동일) ... ... def start_request (clientsocket_fd : int, addr : tuple) -> int : clientsocket = socket.fromfd (clientsocket_fd, socket.af_inet, socket.sock_stream) os.close (clientsocket_fd) # 리소스 누출을 방지하기 위해 원본 파일 설명자를 닫으십시오. # ... (코드는 원래 질문 설명과 동일) ... ... 오류로 예외를 제외하고 : logger.exception (오류) 마지막으로: clientsocket.close () def worker_process (clientsocket_fd, addr) : start_request (clientsocket_fd, addr) __name__ == "__main__"인 경우 : serversocket = init_serversocket () pool = multiprocessing.pool (processes = 16) 사실이지만 : 노력하다: clientsocket, addr = serversocket.accept () clientsocket_fd = clientsocket.fileno () pool.apply_async (worker_process, (clientsocket_fd, addr)) 오류로 예외를 제외하고 : logger.exception (오류) pool.close () pool.join ()
개선 지침 :
-
start_request
함수는 이제clientsocket
의 파일 디스크립터clientsocket_fd
수신합니다. -
socket.fromfd
함수는 파일 디스크립터를 기반으로socket
객체를 재구성하여 하위 프로세스가 소켓을 올바르게 작동 할 수 있도록합니다. -
finally
블록에clientsocket.close()
를 추가하여 소켓이 올바르게 닫혀 있는지 확인하십시오. -
worker_process
함수는clientsocket_fd
처리하고 자식 유출을 피하기 위해 하위 프로세스의 파일 설명자를 닫습니다.
socket
객체 자체 대신 파일 디스크립터를 전달함으로써, 프로세스 간 통신 문제가 해결되어 클라이언트 방해 문제를 피할 수 있습니다. 이 방법은 다중 프로세스 환경에서 TCP 연결을 올바르게 처리 할 수 있도록합니다.
위 내용은 Python Process Pool이 동시 TCP 요청을 처리하고 클라이언트가 막히게하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

교환의 내장 양자화 도구에는 다음이 포함됩니다. 1. Binance : Binance 선물 정량 모듈, 낮은 취급 수수료 및 AI 지원 거래를 지원합니다. 2. OKX (OUYI) : 다중 계정 관리 및 지능형 주문 라우팅을 지원하고 기관 수준의 위험 관리를 제공합니다. 독립적 인 정량적 전략 플랫폼에는 다음이 포함됩니다. 4. Quadency : 맞춤형 위험 임계 값을 지원하는 전문 수준 알고리즘 전략 라이브러리. 5. Pionex : 내장 16 사전 설정 전략, 낮은 거래 수수료. 수직 도메인 도구에는 다음이 포함됩니다. 6. Cryptohopper : 클라우드 기반 정량 플랫폼, 150 개의 기술 지표를 지원합니다. 7. BITSGAP :

마우스 스크롤링 이벤트 침투의 효과를 달성하는 방법은 무엇입니까? 웹을 탐색하면 종종 특별한 상호 작용 디자인이 발생합니다. 예를 들어, DeepSeek 공식 웹 사이트에서 � ...

상위 10 개의 디지털 가상 통화 거래 플랫폼은 다음과 같습니다. 1. Binance, 2. OKX, 3. COINBASE, 4. KRAKEN, 5. HUOBI GLOBAL, 6. BITFINEX, 7. KUCOIN, 8. GEMINI, 9. BITSTAMP, 10. BITTREX. 이 플랫폼은 모두 다양한 사용자 요구에 적합한 높은 보안 및 다양한 거래 옵션을 제공합니다.

이 획기적인 개발을 통해 금융 기관은 전 세계적으로 인정 된 ISO20022 표준을 활용하여 다양한 블록 체인 생태계에서 은행 프로세스를 자동화 할 수 있습니다. Ease Protocol은 사용하기 쉬운 방법을 통해 광범위한 채택을 촉진하도록 설계된 엔터프라이즈 수준의 블록 체인 플랫폼입니다. 오늘 ISO20022 메시징 표준을 성공적으로 통합하여 블록 체인 스마트 계약에 직접 통합했다고 발표했습니다. 이 개발을 통해 금융 기관은 신속한 메시징 시스템을 대체하는 전 세계적으로 인정 된 ISO20022 표준을 사용하여 다양한 블록 체인 생태계에서 뱅킹 프로세스를 쉽게 자동화 할 수 있습니다. 이러한 기능은 곧 "EaseTestnet"에서 시도됩니다. EaseProtocolarchitectDou

디지털 통화 앱의 전망은 광범위하며, 이는 특히 반영됩니다. 1. 기술 혁신 중심 기능 업그레이드, Defi 및 NFT 및 AI 및 빅 데이터 애플리케이션의 통합을 통해 사용자 경험을 향상시킵니다. 2. AML 및 KYC에 대한 규제 준수 동향, 글로벌 프레임 워크 개선 및 엄격한 요구 사항; 3. 기능 다각화 및 서비스 확장, 대출, 재무 관리 및 기타 서비스 통합 및 사용자 경험 최적화; 4. 사용자 기반 및 글로벌 확장 및 사용자 규모는 2025 년에 10 억을 초과 할 것으로 예상됩니다.

통화 서클에서 소위 Big Three는 일반적으로 가장 영향력 있고 널리 사용되는 세 가지 암호 화폐를 나타냅니다. 이러한 cryptocurrencies는 시장에서 중요한 역할을하며 거래량 및 시가 총액 측면에서 잘 수행되었습니다. 동시에 주류 가상 환전 앱은 투자자와 거래자가 암호 화폐 거래를 수행하는 데 중요한 도구이기도합니다. 이 기사는 통화 서클의 3 개의 거인과 권장되는 상위 10 개 주류 가상 환전 앱을 자세히 소개합니다.

최신 시도에서 해결 된 Crypto Exchange FTX는 부채를 회수하고 고객을 상환하기 위해 법적 조치를 취했습니다. 최신 부채를 회수하고 고객을 상환하기위한 노력에서, 해결 된 암호화 Exchange FTX는 특정 발행자에 대한 법적 조치를 취했습니다. FTX Trading 및 FTX Recovery Trust는 합의 된 동전을 거래소에 송금하기로 합의하지 않은 특정 토큰 발행자에 대한 소송을 제기했습니다. 구체적으로, 구조 조정 팀은 월요일에 NFTSTARS LIMITED와 OROSEMI Inc.를 준수 문제로 고소했습니다. FTX는 만료 된 동전을 복구하기 위해 토큰 발행자를 고소하고 있습니다. FTX는 한때 미국에서 가장 뛰어난 암호 화폐 거래 플랫폼 중 하나였습니다. 은행은 2022 년 11 월 창립자 Sam을

Laravel에서는 경로, 컨트롤러 및보기의 기본 사용 및 모범 사례에는 다음이 포함됩니다. 1. HTTP 요청을 애플리케이션 로직에 매핑하는 경로 정의; 2. 컨트롤러를 사용하여 요청 로직을 처리합니다. 3.보기를 통해 사용자에게 데이터 표시. 이러한 단계를 통해 최적화 및 모범 사례를 통해 Laravel 애플리케이션을 만들고 관리하고 응용 프로그램 성능을 향상시킬 수 있습니다.
