(오래 전에) 동시 요청이 동시에 발생할 수 있도록 멀티 스레드 된 웹 스파이더를 작성했습니다. 그것은 GIL 과 멀티 스레드 코드 (IE, 대부분의 경우 물건이 직렬화됩니다!
이 코드를 다시 작성하여 더욱 강력하고 성능을 향상 시키려고합니다. 기본적으로 두 가지 방법이 있습니다. 2.6+에서 새로운 멀티 프로세싱 모듈 을 사용 하거나 일종의 리액터 / 이벤트 기반 모델을 사용할 수 있습니다. 훨씬 간단하고 오류가 적기 때문에 나중에 수행하려고합니다.
따라서 질문은 내 요구에 가장 적합한 프레임 워크와 관련이 있습니다. 다음은 지금까지 내가 알고있는 옵션 목록입니다.
- 뒤틀린 : 파이썬 반응기 프레임 워크의 할아버지 : 복잡하고 약간 부풀어 오른 것처럼 보입니다. 작은 작업을위한 가파른 학습 곡선.
- 이벤트 : lindenlab 의 사람들 로부터 . 이러한 종류의 작업에 맞춰진 Greenlet 기반 프레임 워크. 나는 코드를 살펴 보았지만 너무 아름답 지 않습니다 : pep8과 호환되지 않고 인쇄물에 흩어져 있습니다 (왜 사람들이 프레임 워크에서 이것을합니까!?), API는 약간 일치하지 않는 것 같습니다.
- PyEv : 미성숙합니다. libevent를 기반으로하지만 지금은 아무도 사용하지 않는 것처럼 보이므로 확실한 백엔드가 있습니다.
- asyncore : stdlib에서 : über low-level, 그냥 뭔가를 얻기 위해 많은 레그 워크가 필요합니다.
- 토네이도 :이 제품은 동적 웹 사이트를 위해 설계된 서버 지향 제품이지만 비동기 HTTP 클라이언트 와 간단한 ioloop를 갖추고 있습니다. 작업을 수행 할 수는 있지만 의도 한 작업이 아닌 것 같습니다. [편집 : 불행히도 Windows에서 실행되지 않습니다.이 기능은 나에게 도움이됩니다.이 절름발이 플랫폼을 지원해야합니다.]
내가 놓친 것이 있습니까? 분명히 간단한 비동기 네트워킹 라이브러리의 스위트 스팟에 맞는 라이브러리가 있어야합니다!
[편집 : 이 페이지에 대한 그의 포인터에 대해 intgr 에게 감사드립니다 . 맨 아래로 스크롤하면이 작업을 한 가지 방법으로 해결하려는 정말 훌륭한 프로젝트 목록이 표시됩니다. 실제로 Twisted가 시작된 이래로 상황이 실제로 이동 한 것 같습니다. 사람들은 이제 기존의 리액터 / 콜백 지향 솔루션이 아닌 코 루틴 기반 솔루션 을 선호하는 것 같습니다 . 이 접근법의 이점은 더 분명한 직접 코드입니다. 과거에 특히 boost.asio로 작업 할 때 발견했습니다.C ++에서 콜백 기반 코드는 따르기 어렵고 훈련되지 않은 눈에 비교적 모호한 디자인으로 이어질 수 있습니다. 코 루틴을 사용하면 적어도 좀 더 동 기적으로 보이는 코드를 작성할 수 있습니다. 이제 내 임무는이 많은 라이브러리 중 하나를 내가 좋아하는 모양으로 만들어서 해결하는 것입니다. 다행이다 ...]
[편집 : 아마도 다음에 또는 어떤 의미에서이 주제에 대한이이 질문이나 염려에 우연히 사람의 관심 : 난의 현재 상태 정말 좋은 작성자 발견 가능한 도구를 이 작업]
select
I / O 멀티플렉싱에 사용 하기 때문에 성능과 확장 성이 떨어 집니다. 그러나 당신은 tornado-pyuv를 사용하여 적절한 성능을 얻을 수 있어야합니다 . 2. 이제 Python 3.3+ 및 백 포트 trollius에 asyncio 가있어 이벤트 루프에서 Tornado 애플리케이션을 실행할 수 있습니다 (Twisted는 곧 지원 될 예정 임).