Django ORM, рд╣рд░реЗ рд░рдВрдЧ рдореЗрдВ рднреВрд░рд╛ рдФрд░ рд░реЗрдХ

рддреЛ рдХрдИ рдЕрдкрдиреА рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП Django рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВред Django рдХреЛрдб рд╕рд░рд▓ рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рд╣рдо рдмреИрд╕рд╛рдЦреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдо рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЛрдЪрддреЗ рд╣реИрдВред

рдЬреАрд╡реЗрдВрдЯ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рднреА рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд░рд▓, рдмрд╣реБрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реИ рдФрд░ рдХреЙрд▓рдмреИрдХ рдирд░рдХ рдирд╣реАрдВ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред

рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рджреЛ рд╕рд░рд▓ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреАрдЬреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдарддрд╛ рд╣реИред рд╣рдо Django рдХреЛ рдкреИрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рджрдЧреА, рд╕реБрдЧрдорддрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЖрдирдиреНрджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдиреНрдп рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рд╕рдмрдкреНрд░реЛрд╕реЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдо рдЕрдкрдиреЗ рдирдП рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ Django рдХрд╛ рдЕрдзрд┐рдХрддрдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдорд┐рд▓рд╛рдХрд░, рд╣рдо рдЪреБрдкрдЪрд╛рдк рдЕрдкрдиреЗ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдХреБрдЫ рд░реЗрдХ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред


Django ORM рдФрд░ DB рдХрдиреЗрдХреНрд╢рди рдкреВрд▓



Django рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдврд╛рдВрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд░рд▓ рд╣реИ, рдПрдХ рдзрдорд╛рдХреЗрджрд╛рд░ рд╢рд▓рдЬрдо рдХреА рддрд░рд╣ред рдПрдХ рдмреНрд▓реЙрдЧ рдпрд╛ рд╕рдорд╛рдЪрд╛рд░ рд╕рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рд╡рд╛рд╕реНрддреБрдХрд▓рд╛, рд▓реЗрдХрд┐рди рд╣рдо рдЕрдзрд┐рдХ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд▓реЗрдВ рдЬреЛ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реНрдпрд╕реНрдд рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИред рд▓рд┐рдВрдХ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реЗрд╡рд╛ рджреЗрдВ:

# testproject/__init__.py __import__('gevent.monkey').monkey.patch_all() # testproject/main/models.py from django.db import models class LinkModel(models.Model): url = models.URLField(max_length=256, db_index=True, unique=True) # testproject/main/views.py import urllib2, httplib from django.core.urlresolvers import reverse from django.http import HttpResponse, HttpResponseRedirect from .models import LinkModel def check_url(url): request = urllib2.Request(url) request.get_method = lambda: 'HEAD' try: response = urllib2.urlopen(request) except (urllib2.URLError, httplib.HTTPException): return False response.close() return True def remember(request): url = request.GET['url'] try: link = LinkModel.objects.get(url=url) except LinkModel.DoesNotExist: if not check_url(url): return HttpResponse('Oops :(') link = LinkModel.objects.create(url=url) return HttpResponse('http://localhost:8000' + reverse( go_to, args=(str(link.id).encode('base64').strip(), ))) def go_to(request, code): obj = LinkModel.objects.get(id=code.decode('base64')) return HttpResponseRedirect(obj.url) 


рдмрд┐рдирд╛ рдЬрд┐рдпреЛрд╡реЗрдВрдЯ рдХреЗ, рдпрд╣ рдХреЛрдб рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдзреАрд░реЗ-рдзреАрд░реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рджреЛ рдпрд╛ рддреАрди рдПрдХ рд╕рд╛рде рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдордХреНрдЦрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдеред

рд╣рдордиреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЙрд╡реНрд╕рдЧреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ (рдЬреЛ рдХрд┐ рдкрд╛рдпрдерди рд╕рд╛рдЗрдЯреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╕рдордп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдирдХ рдмрди рдЧрдпрд╛:

 uwsgi --http-socket 0.0.0.0:8000 --gevent 1000 -M -p 2 -w testproject.wsgi 


рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд▓рд┐рдВрдХ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдФрд░ рдЖрдирдиреНрджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ: рд╕рднреА рдЕрдиреБрд░реЛрдз рдиреНрдпреВрдирддрдо рд╕рдордп рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдкреВрд░рд╛ рд╣реЛрддреЗ рд╣реИрдВред

рд╣рдо рдЕрдкрдиреА рдирдИ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдмреИрдарддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рдлрд▓ рд╡рд┐рдХрд╛рд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рд▓реЛрдб 10 рд╕реЗ 75 рдПрдХ рд╕рд╛рде рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИ, рдФрд░ рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рднрд╛рд░ рдХреА рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЕрдЪрд╛рдирдХ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд░рд╛рддреЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рд╣рдЬрд╛рд░ рдкрддреНрд░ рдореЗрд▓ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:

 рдЯреНрд░реИрд╕ рдмреИрдХ:
    ...
    > рд▓рд┐рдВрдХ = LinkModel.objects.get (url = url)
 рдСрдкрд░реЗрд╢рдирд▓Error: FATAL: рд╢реЗрд╖ рдХрдиреЗрдХреНрд╢рди рд╕реНрд▓реЙрдЯ рдЧреИрд░-рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реБрдкрд░рдпреБрд╕рд░ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реИрдВ


рдФрд░ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдпрджрд┐ рдЖрдк en_US.UTF-8 рд▓реЛрдХреЗрд▓ рдХреЛ postgresql.conf рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдкрдиреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ Ubuntu / Debian рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рдЬреИрд╕реЗ рдПрдХ рд╣рдЬрд╛рд░ рдИрдореЗрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗ:

 рдСрдкрд░реЗрд╢рдирд▓Error: ?????: ??????????  ?????  ???????????  ???????????????  ???  ???????????  ?????????????????  (?? ????????????)


рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдП (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдЕрдзрд┐рдХрддрдо 100 рдХрдиреЗрдХреНрд╢рди), рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рджрдВрдбрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣рд╛рдБ рдмрд╣реБрдд рдкрд╣рд▓рд╛ рдиреБрдХрд╕рд╛рди рд╣реИ: Django рдХреЗ рдкрд╛рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдирд╣реАрдВ рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдПрдХ рдПрдХрд▓ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ Django рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИ; рдпрд╣ рдХрд┐рд╕реА рднреА рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ...
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Django рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреА рд╣реИред рдпрд╣ рдПрдХ рдРрд╕рд╛ рд╕рд░реНрд╡рд░ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдиреЗрдЬрдореЗрдиреНрдбреЛ рд░рдирд╕рд░реНрд╡рд░ рдХрдорд╛рдВрдб рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ , рдЬрдмрдХрд┐ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИред


рдХреЗрд╡рд▓ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ: рд╣рдореЗрдВ рддрддреНрдХрд╛рд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдкреВрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

Django рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХреБрдЫ рдкреВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП django-db-pool рдФрд░ django-psycopg2-pool ред рдкрд╣рд▓рд╛ рдкреВрд▓ psycopg2.TreadedConnectionPool рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЬреЛ рдПрдХ рдЦрд╛рд▓реА рдкреВрд▓ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рджреВрд╕рд░рд╛ рдкреВрд▓ gevent.Queue рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ: рдЬрдм рдЖрдк рдХрд┐рд╕реА рдЦрд╛рд▓реА рдкреВрд▓ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧреНрд░реАрдирд▓реЗрдЯ рддрдм рддрдХ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдФрд░ рдЧреНрд░реАрдирд▓реЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкреВрд▓ рдореЗрдВ рдирд╣реАрдВ рдбрд╛рд▓ рджреЗрддрд╛ред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЖрдк рджреВрд╕рд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЕрдзрд┐рдХ рддрд╛рд░реНрдХрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрдиреЗрдВрдЧреЗред

рдбреЗрдЯрд╛рдмреЗрд╕ рдХреНрд╡реЗрд░реАрдЬрд╝ рдЧреНрд░реАрдирд▓реЗрдЯреНрд╕ рдХреЗ рдЕрдВрджрд░


рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд┐рдпреЛрд╡реЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреИрдЪ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЙрд▓ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЧреНрд░реАрдирд▓реЗрдЯреНрд╕ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдирд┐рдЪреЛрдбрд╝ рдХреНрдпреЛрдВ рдирд╣реАрдВ? рд╣рдо рдХрдИ HTTP рдЕрдиреБрд░реЛрдз рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдкрдкреНрд░реЛрд╕реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЧреНрд░реАрдирд▓реЗрдЯреНрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

 def some_view(request): greenlets = [gevent.spawn(handler, i) for i in xrange(5)] gevent.joinall(greenlets) return HttpResponse("Done") def handler(number): obj = MyModel.objects.get(id=number) obj.response = send_http_request_somewhere(obj.request) obj.save(update_fields=['response']) 


рдХрдИ рдШрдВрдЯреЗ рдмреАрдд рдЧрдП, рдФрд░ рдЕрдЪрд╛рдирдХ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдиреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛: рдХрд┐рд╕реА рднреА рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ 504 рдЧреЗрдЯрд╡реЗ рдЯрд╛рдЗрдордЖрдЙрдЯ рдорд┐рд▓рд╛ ред рдЗрд╕ рдмрд╛рд░ рдХреНрдпрд╛ рд╣реБрдЖ? рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреБрдЫ Django рдХреЛрдб рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рднреА рдХрдиреЗрдХреНрд╢рди django.db.connections рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ , рдЬреЛ django.db.utils.ConnectionHandler рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЬрдм рдУрдЖрд░рдПрдо рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрдиреЗрдХреНрд╢рди ['рдбрд┐рдлрд╝реЙрд▓реНрдЯ'] рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред ConnectionHandler .__ getattr__ , ConnectionHandler._connections рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдмрджрд▓реЗ рдореЗрдВ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рддрд╛ рд╣реИред

рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж рд╕рднреА рдЦреБрд▓реЗ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред Request_finished рд╕рдВрдХреЗрдд, рдЬреЛ django.http.HttpResponseBase.close рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ ред Django рдмрд╣реБрдд рдЕрдВрддрд┐рдо рд╕рдордп рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЬрдм рдХреЛрдИ рднреА рдЙрдирд╕реЗ рд╕рдВрдкрд░реНрдХ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЬреЛ рдХрд╛рдлреА рддрд╛рд░реНрдХрд┐рдХ рд╣реИред

рдкрдХрдбрд╝ рдмрд┐рд▓реНрдХреБрд▓ рд╣реИ рдХрд┐ рдХреИрд╕реЗ ConnectionHandler рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд╣ рдереНрд░реЗрдбрд┐рдВрдЧ.рд▓реЛрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдирдкрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж gevent.local.local рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХрд╛рдо рдХрд░рддреА рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╣рд░ рдЧреНрд░реАрдирд▓реЗрдЯ рдореЗрдВ рдЕрджреНрд╡рд┐рддреАрдп рдереАред рдХреБрдЫ_рд╡реНрдпреВ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдПрдХ рдЧреНрд░реАрдирд▓реЗрдЯ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╢реБрд░реВ рд╣реБрдЖ, рдФрд░ ConnectionHandler._connections рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рд╣реИред рд╣рдордиреЗ рдХрдИ рдирдП рдЧреНрд░реАрдирд▓реЗрдЯ рдмрдирд╛рдП, рдЬрд┐рдирдореЗрдВ ConnectionHandler._connections рдЦрд╛рд▓реА рд╣реЛ рдЧрдП, рдФрд░ рдЗрди рдЧреНрд░реАрдирд▓реЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдкреВрд▓ рд╕реЗ рдЕрдзрд┐рдХ рдХрдиреЗрдХреНрд╢рди рд▓реЗ рд▓рд┐рдП рдЧрдПред рд╣рдорд╛рд░реЗ рдирдП рдЧреНрд░реАрдирд▓реЗрдЯреНрд╕ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрдирдХреЗ рд╕реНрдерд╛рдиреАрдп () рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдиреЗ рдХреА рд╕рд╛рдордЧреНрд░реА рдЧрд╛рдпрдм рд╣реЛ рдЧрдИ рдереА, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрд┐рд▓реНрдХреБрд▓ рдЦреЛ рдЧрдП рдереЗ рдФрд░ рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдкреВрд▓ рдореЗрдВ рдирд╣реАрдВ рд▓реМрдЯрд╛ рд░рд╣рд╛ рдерд╛ред рд╕рдордп рдХреЗ рд╕рд╛рде, рдкреВрд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦрд╛рд▓реА рд╣реИред

Django + gevent рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛ рдЗрд╕ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ django.db.close_connection рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░реАрдирд▓реЗрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред рдЕрдкрд╡рд╛рдж рд╣реЛрдиреЗ рдкрд░ рднреА рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЖрдк рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдбреЗрдХреЛрд░реЗрдЯрд░-рдкреНрд░рд╕рдВрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
 class autoclose(object): def __init__(self, f=None): self.f = f def __call__(self, *args, **kwargs): with self: return self.f(*args, **kwargs) def __enter__(self): pass def __exit__(self, exc_type, exc_info, tb): from django.db import close_connection close_connection() return exc_type is None 



рдЖрдкрдХреЛ рдЗрд╕ рдЖрд╡рд░рдг рдХрд╛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЧреНрд░реАрдирд▓реЗрдЯреНрд╕ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрд╡рд┐рдЪ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рдмрдВрдж рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, urllib2.urlopen рд╕реЗ рдкрд╣рд▓реЗ), рдФрд░ рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдореЙрдбрд▓ . objects.all () рдЬреИрд╕реЗ рдЗрдЯреИрд▓рд┐рдХ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдпрд╛ рд▓реВрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рди рд╣реЛрдВред

рд╣рдо Django ORM рдХрд╛ рдЙрдкрдпреЛрдЧ Django рд╕реЗ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ


рдпрджрд┐ рд╣рдо рдХреНрд░реЛрди рдпрд╛ рд╕реЗрд▓реЗрд░реА рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЙрдиреНрд╣реАрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдордп-рд╕рдордп рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреНрд░рд╢реНрди рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк Django рдХреЛ gevent.WSGIServer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдард╛рддреЗ рд╣реИрдВ рддреЛ рд╡рд╣реА рдЪреАрдЬ рд╣рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рд╕реЗрд╡рд╛ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ рдЬреЛ Django ORM рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдореБрдЦреНрдп рдмрд╛рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдкреВрд▓ рдореЗрдВ рд╕рдордп рдкрд░ рдХрдиреЗрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ, рдлрд┐рд░ рдЖрд╡реЗрджрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рдЦреБрд╢реА рджреЗрдЧрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдкреНрд░рд╛рдердорд┐рдХ рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЖрдкрдХреЛ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╡рд╛рдкрд╕ рдкреВрд▓ рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдпрджрд┐ рдЖрдкрдиреЗ рдХреЗрд╡рд▓ gevent рдФрд░ psycopg2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди Django ORM рдРрд╕реЗ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдореВрд░реНрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде, рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рднреБрд▓рд╛рдпрд╛ рдФрд░ рдлрд┐рд░ рд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

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


All Articles