2016-05-10 4 views
1

У меня есть этот код, где он загружает необходимые файлы и печатает необходимую информацию при запуске сервера, но внутри. if __name__ == "__main__": Я начинаю фоновый процесс, а затем, наконец, выполняется app.run() ,Веб-приложение запускается много раз - web.py

Моя проблема заключается в том, что после загрузки всех и запускается фоновый процесс, он начинает печатать и загружать все с начала снова. А также он делает то же самое, когда сервер получает свой первый запрос (GET/POST). Как я могу загрузить его только один раз?

import web 
from multiprocessing import Process 
import scripts 
print 'Engine Started' 
# Code to load and print necessary stuff goes here... 

urls = (
    '/test(.*)', 'Test' 
) 

class Test(): 

    def GET(self,r): 
     tt = web.input().t 
     print tt 
     return tt 


if __name__ == "__main__": 
    try: 
     print 'Cache initializing...' 
     p = Process(target=scripts.initiate_cleaner) 
     p.start() # Starts the background process 
    except Exception, err: 
     print "Error initializing cache" 
     print err 

    app = web.application(urls, globals()) 
    app.run() 

Так что нагрузка трижды («Engine Started» отпечатки трижды) после начала процесса и запроса с локального хоста: 8080/тест т = ег

Я прошел через this, но это решает проблему в колбу и Я использую web.py

+1

'print 'Engine Started'' не находится внутри' if __name__ == "__main __": ' –

+0

@PadraicCunningham, поэтому вы говорите, что я должен поместить все коды загрузки и печати внутри' if __name__ == "__main__": '? –

+0

Только то, что находится внутри 'if __name__ ==" __main __ "', не будет выполнено, если что-либо импортируется из файла. Это основной смысл его использования, только когда вы на самом деле выполняете файл, что-нибудь внутри if будет запущено. –

ответ

1

Я не уверен, почему это вас удивляет или почему это будет проблемой. Фоновый процесс по определению представляет собой отдельный процесс из веб-процесса; каждый из них импортирует код и, следовательно, печатает это сообщение. Если вы не хотите видеть это сообщение, поместите его в блок if __name__.

+0

ok Спасибо, моя проблема решена, как только я переместил код в указанное место. Но почему он проходит весь код при запуске процесса или при получении первого запроса. не для 2-го и более поздних запросов? –

+0

Потому что после первого запроса процесс уже запущен и код уже импортирован. –