2012-06-08 4 views
1

bottlepy 프레임 워크로 응용 프로그램을 개발 중입니다. 개발 용 서버를 실행하기 위해 표준 라이브러리 WSGIRefServer()을 사용하고 있습니다. 단일 스레드 서버입니다.Python : dev 서버에서 프로덕션 서버로 이동

이제 프로덕션을 시작할 때 멀티 스레드 프로덕션 서버로 이동하려는 경우 많은 선택 사항이 있습니다. CherryPy를 선택한다고 가정 해 보겠습니다.

지금, 내 코드에서, 나는 하나의 wsgi 응용 프로그램을 초기화하고 있습니다. 그 외에는, 나는 또한

  • Memcached가 연결
  • 마코는 표준 라이브러리 wsgiref는 단일 스레드 서버이기 때문에
  • MongoDB를 연결

을 템플릿, 나는 ... 다른 일을 초기화하고 단일 wsgi 앱 (wsgi 호출 가능) 만 작성하면 모든 것이 올바르게 작동합니다.

는 내가 알고 싶은 것은 그 나는 멀티 스레드 서버로 이동할 때, 어떻게 것입니다 내 WSGI 응용 프로그램, 초기화 코드, 다른 서버 등의 행동을 연결.

  • 는 멀티 스레드 서버는 모든 스레드 WSGI 응용 프로그램의 별도의 인스턴스를 생성합니다. 새로운 요청마다 새로운 스레드가 만들어지며 (그러면 각 요청에 대해 새로운 wsgi 응용 프로그램을 의미합니까)?

  • 는 등 memcached를, MongoDB를, 내 연결은 스레드 여부를 통해 공유됩니다. 다른 무엇

  • 가 스레드 서버 일반적으로

답변

1

응용 프로그램이 WSGI 준수 프레임 워크를 사용하기위한 요청 - 응답주기를 설명해주십시오 당신은 멀티 스레드를 두려워해서는 안 스레드간에 공유됩니다/단일 스레드 서버 측. 그것은 투명하게 작동하는 것을 의미하며 wsgi를 준수하는 한 어떤 종류의 서버인지에 관계없이 동일한 방식으로 대응해야합니다.

bottle.run() 전에 모든 코드 블록은 한 번만 실행됩니다. 따라서 모든 연결 (데이터베이스, memcached)은 한 번만 인스턴스화되어 공유됩니다. 당신이 호출 할 때

bottle.run() bottlepy 당신을 위해 WSGI 서버를 시작합니다. 해당 서버에 대한 모든 요청은 bottlepy 프레임 워크 내에서 호출 가능한 일부 wsgi를 시작합니다. 이상한 일을하지 않는 한 단일 또는 다중 쓰레드 환경이라면별로 관심이 없습니다.

이상한 경우 나는 전역 변수를 통해 무언가를 동기화하는 것을 의미합니다. (bottlepy가 적절한 문맥에서 적절한 요청을 포함하도록 보장하는 전역 request 개체는 예외입니다.)

하고리스트에서 첫번째 질문에 답변

: 요청 (CherryPy 스레드로부터 저류) 스레드 풀로부터 새로 스폰 스레드 또는 스레드에서 계산 될 수있다

관련 문제