2012-01-17 3 views
0

저는 Apache prefork MPM으로 실행되는 간단한 wsgi 응용 프로그램을 가지고 있는데 modwsgi docs on processes and threads (정말 좋은 읽기)을 읽었습니다. 나는 여전히 몇 가지 일과 동기화가 필요한 것에 대해 혼란 스럽다.WSGI 프로세스/스레드 플래그 및 동기화 혼동

/1 내 아파치 설정이처럼 내 WSGI 응용 프로그램에만 간단한 WSGIScriptAlias ​​인 경우 :

WSGIScriptAlias /alias_name /path/to/wsgi/app.wsgi 

및 가정 prefork의 MPM 아파치, 구축 후 WSGI 스레드 및 프로세스 플래그 [이 같이 와서 wsgi.multiprocess = True, wsgi.multithread = False]. 이것이 단일 프로세스 (스레드 없음)가 각 요청을 처리한다는 것을 의미하는 것으로 알고 있습니다. 그리고이 용어들에서는 프로세스들 사이의 IPC를 수행하지 않고 각 프로세스가 자체 주소 공간을 가지고 있기 때문에 어떤 것도 동기화 할 필요가 없습니다. 그 생각이 맞습니까? 그러나

/2 내 아파치 설정을 사용하면 WSGIDaemonPrcoesses :

WSGIScriptAlias /alias_name /path/to/wsgi/app.wsgi 

WSGIDaemonProcess wsgi_proc_names processes=2 threads=2 

WSGIProcessGroup wsgi_proc_names 

는 다음 WSGI 플래그 [wsgi.multiprocess = 사실, wsgi.multithread = TRUE]로 와서 기회 그이 스레드가 서로의 발가락을 밟을 수 있습니다. 여기에 특정 데이터에 대한 액세스를 동기화해야 할 수도 있습니다. 내 응용 프로그램에 I/O가없는 경우 동기화가 필요한 다른 항목은 무엇입니까? 예를 들어, 클래스 변수를 편집 할 때 잠글 필요가 있습니까? 다중 스레드에 의해 호출되는 함수를 잠그고 해제해야합니까? 이것이 내가 가장 혼란스러워하는 것입니다.

감사 안젤로

답변

0

안젤로, 는 지금까지 # 1이가는대로 당신의 생각은 고체 보인다.

두 번째 질문 (# 2)은 좀 더 까다 롭습니다. 그러나 내가 아는 한 I/O를 잠글 필요가 있습니다 (귀하의 경우에는 아무 것도 아닙니다). 각 스레드는 자체 호출 스택을 가져야하므로 함수를 잠글 필요가 없다고 생각합니다. 잠금이 필요할 수도있는 유일한 다른 점은 전역 변수입니다. 그러나 당신은 그걸 사용하고 있다고 언급하지 않았습니다.

+0

답장을 보내 주셔서 감사합니다 ... 드디어 답변드립니다. 내가 maztaz를 본 어떤 사례가 있습니까? – angeloHarpy

+0

나는 손에 있지 않지만, 하루가 끝날 무언가를 얻을 수 있습니다. – maztaz