저는 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가없는 경우 동기화가 필요한 다른 항목은 무엇입니까? 예를 들어, 클래스 변수를 편집 할 때 잠글 필요가 있습니까? 다중 스레드에 의해 호출되는 함수를 잠그고 해제해야합니까? 이것이 내가 가장 혼란스러워하는 것입니다.
감사 안젤로
답장을 보내 주셔서 감사합니다 ... 드디어 답변드립니다. 내가 maztaz를 본 어떤 사례가 있습니까? – angeloHarpy
나는 손에 있지 않지만, 하루가 끝날 무언가를 얻을 수 있습니다. – maztaz