2017-02-01 12 views
2

У меня есть тот же код, который я упомянул в этом question. Теперь у меня есть одно и то же приложение web.py на Apache. Но когда я запускаю Apache, код внутри if __name__ == "__main__": не выполняется.web.py, размещенный на Apache, не запускает код сбоку, если __name__ == "__main__":

Возможно ли запустить процесс backgroud (проверьте другой вопрос для кода) при размещении в Apache?

Почему код внутри if __name__ == "__main__": не был выполнен?

Это хорошо работает, когда web.py запускается без Apache.

+0

Этот вопрос обсуждается в http://modwsgi.readthedocs.io/en/develop/user-guides/assorted-tips-and-tricks.html Вы может в файле сценария WSGI (только) использовать '' __name __. startswith ('_ mod_wsgi _') ''. –

ответ

3

Код внутри if __name__ == '__main__': не запускается, так как Apache запускает код python.

Скорее всего, вы используете свой python в mod_wsgi или uwsgi, что позволяет Apache разговаривать с python.

Держите 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