2017-02-01 8 views
2

이 코드는 내가 말한 내용 중 question에 있습니다. 이제 Apache에서 동일한 web.py 애플리케이션을 호스팅했습니다. 하지만 아파치를 시작하면 if __name__ == "__main__": 내부의 코드는 실행되지 않습니다.Apache에서 호스팅되는 web.py는 코드가 __name__ == "__main__"인 경우에는 실행하지 않습니다.

Apache에서 호스팅 할 때 백 그라운드 프로세스를 실행할 수 있습니까 (코드에 대한 다른 질문을 확인하십시오)?

if __name__ == "__main__":의 코드가 실행되지 않는 이유는 무엇입니까?

web.py가 Apache없이 실행될 때 잘 작동합니다.

+0

이 문제는 http://modwsgi.readthedocs.io/en/develop/user-guides/assorted-tips-and-tricks.html에 설명되어 당신 WSGI 스크립트 파일 (only)에서''__name __. startswith ('_ mod_wsgi _')''를 사용할 수 있습니다. –

답변

3

if __name__ == '__main__': 내부 코드는 Apache가 파이썬 코드를 실행하는 방식이 아니기 때문에 실행되지 않습니다.

아마도 파이썬을 아파치와 대화하는 방법 인 mod_wsgi 또는 uwsgi에서 파이썬을 돌리고있을 것입니다. 그 간단한 테스트에 유용하지만 같은 유사한 블록을 추가 :

if __name__ == '__main__': 물건을 보관 (다른 질문을 참조) 여전히 실행해야

if __name__ == '__main__': 
    app = web.application(urls, globals()) 
    app.run() 
elif under_mod_wsgi or under_uwsgi: 
    app = web.application(urls, globals()) 
    application = app.wsgifunc() # !!rather than app.run() 

귀하의 Process 물건.

당신이 할 수 under_mod_wsgi 경우 감지하려면

try: 
    from mod_wsgi import version 
    if version: 
     pass 
    under_mod_wsgi = True 
except ImportError: 
    under_mod_wsgi = False 

try: 
    import uwsgi 
    under_uwsgi = True 
except ImportError: 
    under_uwsgi = False