如果__name__ ==" __ main __":在Apache上托管的web.py不会在旁边运行代码

时间:2017-02-01 07:08:28

标签: python apache mod-wsgi wsgi web.py

我有我在本question中提到过的相同代码。现在我在Apache上托管了相同的web.py应用程序。但是当我启动Apache时,if __name__ == "__main__":中的代码不会被执行。

在Apache中托管时是否可以运行backgroud进程(检查代码的其他问题)?

为什么if __name__ == "__main__":内的代码没有被执行?

当没有Apache运行web.py时,这种方法很有效。

1 个答案:

答案 0 :(得分:3)

if __name__ == '__main__':内的代码无法运行,因为Apache不是如何运行python代码。

更有可能的是,您在mod_wsgi或uwsgi下运行python,这是让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