문제

내가 찾는 파이썬은 웹서버는 다중쓰레드 방식을 대신 다중 프로세스(로의 경우에는 mod_python 기본 아파치).내가 원하는 멀티스레드고 싶기 때문에 있는 메모리에 객체를 캐쉬에 사용되는 다양한 http.나의 웹 서버가 많은 비싼 물건을 계산하여 일부 대형 배열해야에서 캐시 메모리를 위한 미래를 피하기 위해 사용하고 다시 계산.이 가능한 다중 프로세스 웹 서버는 환경입니다.이 정보를 저장하기에 memcache 은 또한 좋은 아이디어로 배열은 크고에 저장하 memcache 으로 이어질 것이 직렬화의 데이터에서 오는 memcache 외에 추가의 오버헤드 IPC.

을 구현하는 간단하고 웹 서버를 사용하여 BaseHttpServer,그것은 좋은 성능을 제공합로 몇 시간 후에는 시간입니다.내가 필요로 좀 더 성숙 webserver.이 가능하도록 아파치를 설정할 사용 mod_python 기본에서 쓰레드 모델을 할 수 있도록 일부 개체를 캐싱?

도움이 되었습니까?

해결책

체리. 웹 사이트에서 나열된 기능 :

  • 빠른 http/1.1- 호환, WSGI 스레드 풀링 웹 서버. 일반적으로 Cherrypy 자체는 페이지 당 1-2ms 만 사용합니다!
  • Apache, IIS, Lighttpd, Mod_python, FastCGI, SCGI 및 MOD_WSGI를 포함한 다른 WSGI 지원 웹 서버 또는 어댑터에 대한 지원
  • 한 번에 여러 HTTP 서버 (예 : 여러 포트에서)를 쉽게 실행할 수 있습니다.
  • 개발자 및 배포자 모두를위한 강력한 구성 시스템
  • 유연한 플러그인 시스템
  • 캐싱, 인코딩, 세션, 승인, 정적 컨텐츠 등을위한 내장 도구
  • 기본 MOD_PYTHON 어댑터
  • 완전한 테스트 스위트
  • 교체 가능하고 사용자 정의 할 수 있습니다 ... 모든 것.
  • 내장 프로파일 링, 적용 범위 및 테스트 지원.

다른 팁

고려 재 당신의 디자인이다.을 유지하는 많은 국가에서 당신의 웹 서버는 아마 나쁜 생각이 아니다.멀티 프로세스는 훨씬 더 좋은 방법 안정적입니다.

할 수 있는 다른 방법이 있을 공유하는 국가 간에 별도의 프로세스?무엇에 대한 서비스입니까?데이터베이스?Index?

그것은 보인다는 가능성을 유지하는 거대한 배열에 있는 데이터의 메모리과에 의존하는 하나의 멀티-스레드 프로세스는 모든 서비스를 제공하는 요청은 디자인 또는 아키텍처를 위한 앱이다.

꼬인 그러한 웹 서버 역할을 할 수 있습니다. 멀티 스레드 자체는 아니지만 현재 트렁크에는 (아직 릴리스되지 않은) 멀티 스레드 WSGI 컨테이너가 있습니다. SVN 저장소를 확인한 다음 실행할 수 있습니다.

twistd web --wsgi=your.wsgi.application

어떤 종류의 사이트를 진행하고 있는지, 어떤 종류의 부하를 기대하는지 모르면 결정적인 답을 제공하기가 어렵습니다. 서브 두 번째 성능은 심각한 요구 사항이거나 그렇지 않을 수 있습니다. 마지막 밀리 초를 실제로 저장해야한다면 배열을 메모리에 유지해야합니다. 그러나 다른 사람들이 제안했듯이 다른 것과 함께하지 않을 가능성이 높습니다. 배열에서 데이터의 사용 패턴은 어떤 종류의 선택에 영향을 줄 수 있습니다. 배열의 전체 데이터 세트에 한 번에 액세스 할 필요가 없으므로 데이터를 작은 청크로 나누고 그 덩어리를 하나의 큰 덩어리 대신 캐시에 넣을 수 있습니다. 배열 데이터가 얼마나 자주 업데이트되어야하는지에 따라 Memcached, Local DB (Berkley, SQLite, Small MySQL 설치 등) 또는 원격 DB 중에서 선택할 수 있습니다. 나는 상당히 빈번한 업데이트를 위해 memcached라고 말하고 싶습니다. 매일 주파수에 대한 시간당 및 원격 빈도에 대한 로컬 DB. 고려해야 할 한 가지는 캐시 미스 후에 발생하는 일입니다. 50 명의 클라이언트가 갑자기 캐시 미스를 받고 동시에 모든 클라이언트가 캐시 미스를 받고 동시에 비싼 배열을 재생하기로 결정하면 상자 (ES)가 8086으로 빠르게 줄어 듭니다. 따라서 어떻게 처리 할 것인지 고려해야합니다. 많은 기사가 캐시 미스에서 복구하는 방법을 다룹니다. 이것이 도움이되기를 바랍니다.

다중 스레드가 아니라 꼬인 당신의 필요에 도움이 될 수 있습니다.

대신 각 프로세스에서 액세스 할 수있는 분산 캐시를 사용할 수 있습니다. memcached 떠오르는 예가됩니다.

Web.py는 과거에 나를 행복하게 만들었습니다. 확인하는 것을 고려하십시오.

그러나 건축 재 설계가 적절하지만 비싸지 만 솔루션이 될 수 있습니다.

아마도 당신은 Python에서 구현에 문제가있을 것입니다. BaseHttpServer. "고착"하고 사용하는 간단한 스레드 서버를 구현할 이유가 없습니다. BaseHttpServer 그리고 threading 어렵지 않아야합니다.

또한 참조하십시오 http://pymotw.com/2/basehttpserver/index.html#module-basehttpserver 간단한 멀티 스레드 서버를 구현하는 것 HTTPServer 그리고 ThreadingMixIn

나는 개인적으로나 전문적으로 Cherrypy를 사용하며, 나는 그것에 매우 만족합니다. 나는 심지어 글로벌 객체 캐시, 백그라운드에서 다른 스레드를 실행하는 등과 같이 당신이 묘사하고있는 종류의 일을하고 Apache와 잘 통합됩니다. LocalHost에 바인딩 된 독립형 서버로 Cherrypy를 실행 한 다음 Apache의 사용을 사용하십시오. mod_proxy 그리고 mod_rewrite Apache가 귀하의 요청을 Cherrypy에 투명하게 전달하도록합니다.

Cherrypy 웹 사이트는입니다 http://cherrypy.org/

실제로 최근에 같은 문제가있었습니다. 즉, 우리는 basehttpserver를 사용하여 간단한 서버를 작성했는데 그것이 멀티 스레드가 아니라는 사실이 큰 단점이라는 것을 발견했습니다.

내 솔루션은 서버를 Pylons로 포트하는 것이 었습니다.http://pylonshq.com/). 포트는 상당히 쉬웠으며 한 가지 이점은 Pylons를 사용하여 GUI를 만드는 것이 매우 쉽기 때문에 기본적으로 데몬 프로세스 위에 상태 페이지를 던질 수있었습니다.

Pylons를 이런 식으로 요약 할 것입니다.

  • 웹 앱을 배포하기가 매우 쉽다는 점에서 Ruby on Rails와 유사합니다.
  • 기본 템플릿 언어 인 Mako는
  • 매우 편리한 라우팅 URL 시스템을 사용합니다.
  • 우리에게는 성능이 문제가되지 않으므로 Pylons가 귀하의 요구에 적절하게 수행 할 것이라고 보장 할 수 없습니다
  • Apache & Lighthttpd와 함께 사용할 수 있지만 이것을 시도하지는 않았습니다.

우리는 또한 꼬인 앱을 실행하고 그것에 만족합니다. Twisted는 성능이 좋지만 Twisted의 싱글 스레드/연기 대기식 프로그래밍 모델이 상당히 복잡하다고 생각합니다. 많은 장점이 있지만 간단한 앱의 선택은 아닙니다.

행운을 빕니다.

평범한 용의자와 다른 것을 지적하기 위해 ...

몇 년 전 내가 사용하는 동안 Zope 2.x 나는 읽었다 메두사 플랫폼에 사용 된 웹 서버였습니다. 그들은 무거운 짐으로 잘 작동하도록 광고했으며 요청한 기능을 제공 할 수 있습니다.

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