2012-11-29 3 views
1

나는 응용 프로그램을 실행하는 것이 매우 쉽습니다 PHP/Apache 세계에서 오는거야. PHP 응용 프로그램이 중단 될 때마다 해당 요청을 실행하는 Apache 프로세스가 중지되지만 서버는 여전히 행복하게 망가져 다른 클라이언트에 응답합니다. Python 응용 프로그램을 다른 방식으로 작동시키는 방법이 있습니까? Tornado 또는 CherryPy과 같은 wsgi 서버를 설정하면 어떻게 작동합니까? 또한, 다른 도메인을 가진 한 서버에서 여러 응용 프로그램을 어떻게 실행합니까?Apache와 비슷한 WSGI 서버를 설치하는 방법은 무엇입니까?

답변

1

UNIX와 비슷한 환경에 있다면 Daemon Mode의 Apache에서 mod_wsgi을 실행할 수 있습니다. 이것은 파이썬 코드에 대한 별도의 프로세스가 있다는 것을 의미합니다. 그리고 서버가 충돌하더라도 서버는 정상적으로 계속 실행됩니다. WSGI 프로세스가 자체적으로 다시 시작되기를 바랍니다. WSGI 응용 프로그램은 여러 프로세스 및 프로세스 당 여러 스레드에서 실행될 수 있습니다.

동일한 서버에서 여러 도메인을 실행하는 경우 Name-Based Virtual Hosts을 확인하십시오.

+0

+1. 코드가 바뀔 때 mod_wsgi 자동 재로드가 가능합니다 (mod_wsgi 사이트에 예제 코드가 있습니다). – Cameron

3

어쨌든 WSGI 서버의 경우 앞으로 어떤 일이 벌어 질 수 있습니다. 이는 모든 파이썬 예외가 현재 요청에만 영향을 미치고 프레임 워크 또는 WSGI 서버가 예외를 포착하여 로그하고 HTTP 500 상태 페이지로 변환하기 때문입니다. 응용 프로그램은 여전히 ​​메모리에 남아 있으며 향후 요청을 계속 처리합니다.

우리가 알아 낸 것은 정확히 '아파치 프로세스 충돌'이 무엇을 의미합니다.

프로세스가 코어 덤프로 인해 프로세스를 완전히 종료하게 만드는 경우 코드가 충돌하는 경우는 거의 없습니다. 따라서 응용 프로그램 언어 수준의 오류를 전체 프로세스 충돌과 동일시하는 용어에 혼동을 느낍니까?

프로세스를 중단하는 방법을 찾았더라도 Apache/mod_wsgi가 정상적으로 처리하고 프로세스가 대체됩니다. Gunicorn WSGI 서버도이를 수행 할 것입니다. CherryPy는 모니터하는 프로세스 매니저가없는 한 프로세스 모니터가 모니터를 다시 시작하지 않는 한 CherryPy를 사용하지 않습니다. 토네이도는 단일 프로세스 모드에서 동일한 문제가 발생합니다. 토네이도를 Gunicorn의 작업자로 사용하는 것은 그 일환으로 한 가지 방법입니다. 토네이도 자체가 여러 프로세스를 실행하여 프로세스를 다시 시작할 수 있다고 생각합니다.

파이썬 예외를 유발 한 응용 프로그램 버그가 충분히 좋지 않고 프로세스 내에서 상태가 손상되면 이후 요청에 문제가 발생할 수 있습니다. 이것은 PHP와의 한 가지 차이점입니다. PHP를 통해 요청이 성공했는지 여부에 관계없이 응용 프로그램은 효과적으로 폐기되고 지속되지 않습니다. 따라서 버그가있는 코드는 후속 요청에 영향을 줄 수 없습니다. 파이썬에서는 코드가로드되고 상태가 유지되는 프로세스가 요청 사이에 유지되므로 기술적으로 프로세스를 다시 시작해야 문제를 해결할 수 있습니다. 하나의 요청이 오류 응답을 반환하면 자동으로 프로세스를 다시 시작하는 메커니즘이 있지만 어떤 WSGI 서버도 모르겠습니다.

+0

Graham, 혼란스러워서 잡히지 않은 예외처럼 응용 프로그램 언어 오류에 대해 이야기하고있었습니다. 철저한 답변 주셔서 감사합니다. –

관련 문제