문제

우선, 나는 Forkmixin, Threadmixin과 함께 Twisted and SocketServer를 사용하고 "스레드-풀"수용체를 사용해 보았습니다.

그러나 나는 파이썬에서 특별한 일을하고 싶었습니다.

Alittle 배경. 이전에 나는 소켓에 바인딩하고들을 수있는 간단한 TCP Deamon을 C로 썼다. 그런 다음 Pre-Fork X를 여러 번 사전으로 전달한 다음 모든 포크에게 서버 소켓 DESC를 전달하면 모든 사람이 고객을 매우 매력적으로 받아 들일 것입니다.

내가 좋아하는 "Select/Poll"기반 Asyncore를 확인했습니다. 나의 유일한 쇠고기는 멀티 CPU 기계를 활용하여 스케줄링으로 최선을 다하기 위해 몇 번 포킹하여 약간의 CPU를 구매할 수 있다는 것입니다.

나는 그것이 내 삶을 위해 일하게 만들 수 없다. 단일 인스턴스 만 연결을 수락 할 수 있으며, 다른 모든 인스턴스는 단순히 Connect를 처리 할 때 예외를 던지고 '비어있는 것을 반복 할 수 없습니다'.

이것이 가능합니까? 많이 확인했지만 Asyncore Dispatchers를 포킹에 대한 코드를 찾을 수 없었습니다 (Cry).

고맙습니다!

업데이트 1 : (요청 된대로 전체 추적)

error: uncaptured python exception, closing channel <__main__.EchoServer listening 0.0.0.0:8001 at 0x2ad4880c93f8> (<type 'exceptions.TypeError'>:'NoneType' /python2.6/asyncore.py|readwrite|99] [/usr/local/python2.6.9/lib/python2.6/asyncore.py|handle_read_event|408] [./6py-server.py|handle_accept|87])

내가 asyncore.loop 등 앞에 갈지 여부에 관계없이 항상 허용됩니다.

업데이트 2 : (전체 소스) 페이스트 싱 된 소스

도움이 되었습니까?

해결책

Traceback에 코드 마크 업을 사용해야합니다. 그렇지 않으면 엉망이 표시되며 예외 유형이 표시되지 않습니다.

그러나 나는 그것이 믿습니다 TypeError: 'NoneType' object is not iterable ~부터 self.accept() 돌아올 수 있습니다 None. 그 이유는 여러 프로세스가 청취 소켓을위한 읽기 이벤트를 얻을 수 있지만 하나만 받아 들일 수 있기 때문입니다. 나머지 과정이 얻을 것입니다 EWOULDBLOCK 잡힌 오류가 발생했지만 다시 돌아옵니다 None 연결 주소 쌍 대신.

당신의 변화 handle_accept() 언제 즉시 돌아 오기 위해 accept() 보고 None.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top