2011-10-28 3 views
0

, 나는 Cherrypy 3.2를 HTTP 프레임 워크로 사용하기로 결정했습니다.CherryPy, SQLAlchemy 핵심 스레드 안전성? 내 웹 기반 응용 프로그램에서

cherrypy.Application 클래스를 사용하여 Apache2에서 mod_wsgi를 통해 제공되는 WSGI 호환 appliaction 객체를 만듭니다.

또한 SQLalchemy 0.7.3 (ORM 아님)의 핵심 구성 요소 만 사용하고 있습니다. 요청 당 정확한 세션 바인딩을 위해 cherrypy를위한 몇 가지 도구가 있습니다 (예 : SATools). 그러나 SQLalchemy의 Session 객체는 핵심이 아니라 ORM의 일부입니다.

그래서 비슷한 도구를 만드는 방법에 대해 생각했지만 세션이 필요하지 않았습니다.

SQLAlchemy의 문서는 말한다 다음 os.fork 시스템 호출, 또는 예를 들어 파이썬 멀티 모듈, 그것은 일반적으로 별도의 엔진을 사용하는 것이 필수이다를 사용하는 여러 프로세스 응용 프로그램에 대한

각 하위 프로세스에 대해

그래서 cherrypy 스레드 당 하나의 엔진을 올바르게 작성하는 방법은 무엇입니까? 스레드가 apache2 (아마)에 의해 생성된다는 것에 유의하십시오.

감사합니다.

편집 : 그것은 어쩌면 중요하다, 그 WSGI 응용 프로그램은 내가 응용 프로그램이 사전로드되어 있지 않기 때문에 나는이 질문을 이해한다면이 문제라고 생각하지 않습니다 mod_wsgi에 따라 아파치

답변

0

에 의해 데몬 모드로 실행됩니다 mod_wsgi의 fork 이전에 메모리에 저장한다. 대신 응용 프로그램이 각기 다른 프로세스에 별도로로드되므로 포크에서 상속으로 인한 공유 작업으로 인한 문제는 없습니다.

+0

이 문제가 확실합니까? 나는 그것을 테스트하고 있었고 응용 프로그램 객체가 실제로 스레드간에 공유된다고 생각합니다. – JoshuaBoshi

+0

질문을 편집하고 wsgi 응용 프로그램이 데몬 모드 (이 경우 중요 할 수도 있음)에 사용된다는 정보를 추가했습니다. – JoshuaBoshi

+0

프로세스가 스레드와 다릅니다. 필자는 os.fork에 대해 언급 한 인용 된 텍스트에 중점을 두었습니다. 이것은 스레드가 아니라 프로세스에 대한 것임을 의미합니다. 그래서 나는 당신이 당신이 인용 된 섹션을 기반으로 필요하다는 것을 알 수없는 스레드 당 하나의 네드를 믿는 데 혼란스러워하고 있다고 생각했습니다. –