рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рд╡реЗрдмрдк

рдорд╛рдирдХ рд╡реЗрдмрдПрдк рдврд╛рдВрдЪреЗ рдореЗрдВ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди Google рдХреА рдЗрд╕ рдЕрдЪреНрдЫреА рд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ - рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдореЙрдбреНрдпреВрд▓ рд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЦрддрд░рд╛ рд╣реИ: рдПрдХ рдмрдбрд╝реЗ рдЖрд╡реЗрджрди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓реЙрдиреНрдЪ рдореЗрдВ рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЛрдб рд╣реЛрдиреЗ рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдкреГрд╖реНрда рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛред

рдЖрдЬ рд╣рдо рд╡реЗрдмрдкреЗрдЬ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП "рд╕рд┐рдЦрд╛рдПрдВрдЧреЗ"ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рдХреЛрдб рд╣реЛрдЧрд╛, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╡рд┐рд╡рд░рдг рдФрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реЛрдЧрд╛ред рдЖрд▓рд╕реА рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
from google.appengine.ext.webapp import RequestHandler, WSGIApplication, util import os, sys dev_server = os.environ.get('SERVER_SOFTWARE').lower().startswith('dev') class lazy_loader(object): def __init__(self, fullname): self.modulename, sep, self.objname = fullname.rpartition('.') if dev_server: self() def __call__(self): try: return self.obj() except AttributeError: if not sys.modules.has_key(self.modulename): __import__(self.modulename, globals(), locals(), [], 0) self.obj = sys.modules.get(self.modulename).__dict__.get(self.objname) return self.obj() application = WSGIApplication([(route[0], lazy_loader(route[1])) for route in [ (r'/', 'handlers.MainPage'), (r'/search/', 'handlers.Search'), (r'/_ah/queue/sendmail', 'mail.SendMail'), (r'/_ah/queue/HeavyTask', 'tasks.HeavyTask'), ]], debug=os.environ.get('CURRENT_VERSION_ID').lower().startswith('dev')) def main(): util.run_wsgi_app(application) if __name__ == '__main__': main() 


рдЖрд▓рд╕реА рд▓реЛрдбрд░ред


lazy_loader рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдореБрдЦреНрдп рдмрд╛рдд рд╣реИред рдпрд╣ рдПрдХ рдЫреЛрдЯреА рдкрд░рдд рд╡рд╕реНрддреБ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╕рдмрд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд░рдВрднреАрдХрд░рдг рд╣реИред рдпрд╣рд╛рдВ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рджрд░рдЕрд╕рд▓, рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рд╣реИрдВрдбрд▓рд░ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред if dev_server: self.__call__() рд▓рд╛рдЗрди if dev_server: self.__call__() рдХреЗрд╡рд▓ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдбреАрдмрдЧрд┐рдВрдЧ рдХреА рд╕реБрд╡рд┐рдзрд╛ рджреЗрддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рддрд┐рд░рд╕реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд╛рд╕ рд╕рд░реНрд╡рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИред

рдЬрдм рд╣реИрдВрдбрд▓рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ lazy_loader рддреБрд░рдВрдд рдХреЙрд▓ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред AttributeError self.obj рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛ self.obj рдХреНрдпреЛрдВрдХрд┐ self.obj рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдХреЙрд▓ рдкрд░ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдЧрд╛)ред рдпрджрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде self.obj рдЬрд╛рдВрдЪ рдХрд░реЗрдВ, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдирд╛рд╡рд╢реНрдпрдХ рдСрдкрд░реЗрд╢рди рдХрд░реЗрдЧрд╛; рдереЛрдбрд╝рд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА ... рдЖрдк "рдЦреЛ" AttributeError рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ AttributeError (рдпрджрд┐ рдРрд╕реЗ рдЕрдЪрд╛рдирдХ рд╣реИрдВрдбрд▓рд░ рдХреЛрдб рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ) - рд╡реЗ рддрдм рднреА рдкреЙрдк рдЕрдк рдХрд░реЗрдВрдЧреЗ рдЬрдм рджреВрд╕рд░рд╛ рд╣реИрдВрдбрд▓рд░ рдХреЙрд▓ред

рд╣реИрдВрдбрд▓рд░ рд▓реЛрдбрд┐рдВрдЧред


рд╢рд╛рдпрдж рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ: рд▓рд╛рдкрддрд╛ self.obj рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛ self.obj рдПрдХ AttributeError рдЙрдард╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣реИрдВрдбрд▓рд░ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред from package import module рдорд╛рдирдХ рдЕрдЬрдЧрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗрд╡рд▓ from package import module рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдирд╛рдо рд╡рд┐рдХрд╛рд╕ рдХреЗ рдЪрд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рдВрдХреНрд╢рди __import__ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣рдо рдЗрд╕реЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рдкрд╣рд▓реЗ рд╣рдо рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ sys.modules рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЖрдпрд╛рддрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЛ sys.modules рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ sys.modules рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, handlers рдореЙрдбреНрдпреВрд▓ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЗ рджреМрд░рд╛рди рдПрдХ рдмрд╛рд░ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╡реЗрдмреИрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред


рдорд╛рд░реНрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдзрд┐рдХ рджреГрд╢реНрдп рдФрд░ рдХрдо рдмреЛрдЭрд┐рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реВрдЪреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП lazy_loader рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, (r'/', 'handlers.MainPage') (r'/', lazy_loader('handlers.MainPage')) (r'/', 'handlers.MainPage') рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (r'/', lazy_loader('handlers.MainPage')) ред (r'/', lazy_loader('handlers.MainPage')) ред

рдФрд░ рдПрдХ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЫреЛрдЯреА рдЪреАрдЬрд╝ рдЬреЛ рдореИрдВрдиреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдирд╣реАрдВ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣ рд╣реИ webapp рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░ webapp рдбреАрдмрдЧрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗрд╡рд▓ рддрднреА рдЬрд╛рд░реА рдХреА рдЬрд╛рдПрдЧреА рдЬрдм рдЖрд╡реЗрджрди рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг "рджреЗрд╡" (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, develop , dev-0-1-123 , dev-B1-37-2 , рдЖрджрд┐) рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In128164/


All Articles