2017-02-01 2 views
2

J'ai ce même code que j'ai mentionné dans ce question du mien. Maintenant, j'ai hébergé la même application web.py sur Apache. Mais quand je démarre Apache le code à l'intérieur if __name__ == "__main__": n'est pas exécuté.web.py hébergé sur Apache ne pas exécuter le code dans le côté si __name__ == "__main__":

Est-il possible d'exécuter le processus backgroud (vérifiez l'autre question pour le code) lorsqu'il est hébergé dans Apache?

Pourquoi le code if __name__ == "__main__": n'est pas exécuté?

Cela fonctionne bien lorsque web.py est exécuté sans Apache.

+0

Cette question est abordée dans http://modwsgi.readthedocs.io/en/develop/user-guides/assorted-tips-and-tricks.html Vous peut dans le fichier de script WSGI (seulement), utiliser '' __name __. startswith ('_ mod_wsgi _') ''. –

Répondre

3

Le code à l'intérieur if __name__ == '__main__': ne s'exécute pas car Apache n'exécute pas le code python. Plus probablement, vous utilisez votre python sous mod_wsgi ou uwsgi, ce qui permet à Apache de parler à python.

Gardez les choses if __name__ == '__main__':: qui est utile pour les tests simples, mais ajouter un bloc similaire comme:

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() 

Vos trucs Process devrait encore courir (référence à votre autre question).

Pour détecter si under_mod_wsgi vous pouvez:

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