<p>gunicorn 19.x django-1.7.1 рдФрд░ gevent . рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ</p>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдирд╡ре░ 2014  ┬╖  53рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: benoitc/gunicorn

рдирдорд╕реНрддреЗ,

рдореИрдВ gevent рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ gunicorn 19.x ( 19.0 рдФрд░ 19.1.1 рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг) рдХреЗ рд╕рд╛рде рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ django-1.7.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣ рдЕрдкрд╡рд╛рдж рд╣реИ:

Traceback:
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  87.                 response = middleware_method(request)
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/contrib/auth/middleware.py" in process_request
  34.         if user and hasattr(user, 'get_session_auth_hash'):
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/utils/functional.py" in inner
  224.             self._setup()
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/utils/functional.py" in _setup
  357.         self._wrapped = self._setupfunc()
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/contrib/auth/middleware.py" in <lambda>
  23.         request.user = SimpleLazyObject(lambda: get_user(request))
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/contrib/auth/middleware.py" in get_user
  11.         request._cached_user = auth.get_user(request)
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/contrib/auth/__init__.py" in get_user
  151.         user_id = request.session[SESSION_KEY]
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py" in __getitem__
  49.         return self._session[key]
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/contrib/sessions/backends/base.py" in _get_session
  175.                 self._session_cache = self.load()
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/contrib/sessions/backends/db.py" in load
  21.                 expire_date__gt=timezone.now()
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/db/models/manager.py" in manager_method
  92.                 return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/db/models/query.py" in get
  351.         num = len(clone)
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/db/models/query.py" in __len__
  122.         self._fetch_all()
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/db/models/query.py" in _fetch_all
  966.             self._result_cache = list(self.iterator())
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/db/models/query.py" in iterator
  265.         for row in compiler.results_iter():
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in results_iter
  700.         for rows in self.execute_sql(MULTI):
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
  784.         cursor = self.connection.cursor()
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/db/backends/__init__.py" in cursor
  163.         self.validate_thread_sharing()
File "/home/sieve/sitroom.sieve.com.br/shared/env/local/lib/python2.7/site-packages/django/db/backends/__init__.py" in validate_thread_sharing
  515.                 % (self.alias, self._thread_ident, thread.get_ident()))

Exception Type: DatabaseError at /
Exception Value: DatabaseWrapper objects created in a thread can only be used in that same thread. The object with alias 'default' was created in thread id 140049505195808 and this is thread id 61130224.

рдпрд╣рд╛рдБ рдореЗрд░рд╛ gunicorn.conf.py :

##
# Gunicorn config at 
# Managed by Chef - Local Changes will be Nuked from Orbit (just to be sure)
##

# What ports/sockets to listen on, and what options for them.
bind = "127.0.0.1:9300"

# The maximum number of pending connections
backlog = 2048

# What the timeout for killing busy workers is, in seconds
timeout = 300

# How long to wait for requests on a Keep-Alive connection, in seconds
keepalive = 2

# The maxium number of requests a worker will process before restarting
max_requests = 1024

# Whether the app should be pre-loaded
preload_app = True

# How many worker processes
workers = 16

# Type of worker to use
worker_class = "gevent"

# The granularity of error log outputs.
loglevel = "error"

рддреНрд░реБрдЯрд┐ рд╣рд░ рдмрд╛рд░ рд╣реЛрддреА рд╣реИ, рдмрд╕ django рдРрдк рдХреЗ рдХрд┐рд╕реА рднреА рдпреВрдЖрд░рдПрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ (рдЬреЛ рдХрд┐ рдХрд┐рд╕реА рднреА рдореЙрдбрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
рдЪреВрдВрдХрд┐ gunicorn-18.0 рдмрджрд▓рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдореИрдВ рдорд╛рди рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ gunicorn-19.x рдХреБрдЫ рдЕрд▓рдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдирдХрд╛рд░реА рдЪрд╛рд╣рд┐рдП рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛ред

рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ 18.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

( FeaturWorker FeaturCore ThirdpartGevent Deploy Investigation - Bugs -

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@gukoff рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ

рд╕рднреА 53 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

рдореИрдВ _рдерд┐рдВрдХ_ рд╣рдо рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ django wsgi рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрдо рд╕реЗ рдХрдо django 1.7 рдкрд░, рдЖрдпрд╛рдд рдкрд░ рд╕рднреА django рдореЙрдбрд▓ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред

рдирдорд╕реНрддреЗ @tilgovi , рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ preload_app = False рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдВ gunicorn-19.1.1 рдФрд░ django-1.7.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ 19.x рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди рдХреНрд▓рд╛рдЙрдб рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ?

рдореБрдЭреЗ рдЕрдм рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ django рдРрдк рдореЗрдВ рд░реЗрд╡реЗрди [1] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдФрд░ рд░реЗрд╡реЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдбрдмреНрд▓реВрдПрд╕рдЬреАрдпреВ рдорд┐рдбрд▓рд╡реЗрдпрд░ [1] рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд░реЗрд╡реЗрди рдХреЛ рдбрдмреНрд▓реВрдПрд╕рдЬреАрдЖрдИ рдСрдмреНрдЬреЗрдХреНрдЯ (рдореВрд▓ рдбреАрдЬреЗрдВрдЧреЛ рдбрдмреНрд▓реВрдПрд╕рдЬреАрдЖрдИ рдРрдк рдХреЛ рд▓рдкреЗрдЯрдХрд░) рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп (рдмрд╛рд╣рд░реА рдХрдорд╛рдВрдб рдХреЗ рд░реВрдк рдореЗрдВ, run_gunicorn django рдХрдорд╛рдВрдб) рд╣рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди рдореЗрдВ рдПрдХ рд╣реБрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛[2]ред рдЬрдм рдпрд╣ рд╣реБрдХ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗрд╡рд▓ рддрднреА рдмреВрдЯ рд╣реЛрддрд╛ рд╣реИ рдЬрдм preload_app = True , рд▓реЗрдХрд┐рди рддрдм gevent рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЬрдм рдореИрдВ рд╣реБрдХ рд╕рдХреНрд╖рдо рдХреЗ рд╕рд╛рде preload_app = True рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЧрдирд┐рдХреЛрд░реНрди рдмреВрдЯ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдФрд░ ImportError рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдореЗрд░реЗ "DJANGO_SETTINGS_MODULE" рдХреЛ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд░реЗрд╡реЗрди 4.2.3

рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рд╡рд╛рдкрд╕ рдЧрдирд┐рдХреЛрд░реНрди рдкрд░ рдЬрд╛рдКрдБрдЧрд╛ 18.x , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджреЛрдиреЛрдВ рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (WSGI рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ gevent рдФрд░ raven)
рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?

[1] http://raven.readthedocs.org/en/latest/config/django.html#wsgi -middleware
[реи] http://raven.readthedocs.org/en/latest/config/django.html#gunicorn

@daltonmatos рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ django 1.7.1 рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗрдЯрдЕрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣ рд╢рд╛рдпрдж рдмрджрд▓ рдЧрдпрд╛ рд╣реИ, рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░

рдПрдХ рдФрд░ рдмрд╛рдд рдЖрдЬ рд╣реА рдкрддрд╛ рдЪрд▓реА,
django 1.7 рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди 19.3.0 рдХреЗ рд╕рд╛рде рд╕рддреНрд░ рд╕рдВрдЪрд╛рд▓рди рд╕реЗрдХрдВрдб рдХреЗ рднреАрддрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ 18 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

рдПрдлрд╡рд╛рдИрдЖрдИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ https://github.com/benoitc/gunicorn/issues/879 рдЬреИрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рд▓реЗрдХрд┐рди рдареАрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдЧрдирд┐рдХреЛрд░реНрди 19.x рдмрдирд╛рддрд╛ рд╣реИред Django рдХреЗ рд╕рд╛рде рдЕрдиреБрдкрдпреЛрдЧреАред рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдЧреЗрд╡реЗрдВрдЯ рд╡рд░реНрдХрд░ рдХреЗ рд▓рд┐рдП? рдореИрдВрдиреЗ рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

@tilgovi рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдкрд░реНрдпрд╛рд╡рд░рдг рдореЗрдВ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред 19.x рдореЗрдВ рд╣рдордиреЗ wsgi.multithread рдХреЛ true рдЬрд╣рд╛рдВ рдпрд╣ 18.x рдореЗрдВ false рдерд╛:

https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/gevent.py#L99

рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ django рдореЗрдВ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдПрдХ рдЧреНрд░реАрдирд▓реЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдзрд╛рдЧрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рдЪрд╛рд░? рдХрдо рд╕реЗ рдХрдо рд╢рд╛рдпрдж рд╣рдо рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкрд░реАрдХреНрд╖рдг рдпрд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рддрд░реАрдХрд╛ рд╣реИ?

рдУрд╣, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИред рдЕрдЪреНрдЫреА рдпрд╛рджрджрд╛рд╢реНрдд, @benoitcред

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

рдореИрдВрдиреЗ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ fix/927 рдХреЛ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдлрд┐рдХреНрд╕ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдХреГрдкрдпрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ!

рдореИрдВ рдЕрднреА рднреА django 1.8.1 (рдФрд░ 1.7.1) рдФрд░ gevent 1.0.1 рдХреЗ рд╕рд╛рде рдлрд┐рдХреНрд╕/927 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╣рдо рдЕрднреА рднреА рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реЛрдВред

рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрджрд╛рд╣рд░рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдирд┐рдореНрди рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд┐рдпрд╛:

gunicorn --env DJANGO_SETTINGS_MODULE=testing.settings -k gevent -w3 wsgi:application

рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдореИрдВ рдЕрднреА рднреА рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреИрд╕реЗ рдХрд┐ рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рдирд╛:

    gunicorn --env DJANGO_SETTINGS_MODULE=settings -w 3 --max-requests=1000 -b 0.0.0.0:8000 -k gevent --config ogs/gunicorn.py  --pythonpath ogs wsgi:application

рдХреНрдпрд╛ рдХреЛрдИ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд┐рд╡рд░рдг рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

@brockhaywood project.settings рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╣рд╛рдБ рдореБрдЭреЗ рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдиреНрдпреВрдирддрдо рдХреЛрдб рд╣реИред

рдКрдкрд░ рдХреЗ рдирд┐рд╢рд╛рди рдХреЛ рджреЗрдЦреЗрдВ рддреЛ рдпрд╣ рдордВрдХреА рдкреИрдЪрд┐рдВрдЧ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдзрд╛рдЧреЛрдВ рдХреЛ рдордВрдХреА рдкреИрдЪ рди рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдХреНрдпрд╛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдЪ рдХреЛ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ?

--- a/gunicorn/workers/ggevent.py
+++ b/gunicorn/workers/ggevent.py
@@ -60,9 +60,9 @@ class GeventWorker(AsyncWorker):

         # if the new version is used make sure to patch subprocess
         if gevent.version_info[0] == 0:
-            monkey.patch_all()
+            monkey.patch_all(thread=False)
         else:
-            monkey.patch_all(subprocess=True)
+            monkey.patch_all(subprocess=True, thread=False)

         # monkey patch sendfile to make it none blocking
         patch_sendfile()

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд wsgi рдХреЗ рд╕рд╛рде рдЙрдкрд░реЛрдХреНрдд рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдм рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

from gevent import monkey
monkey.patch_all(thread=False)

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

from django.core.cache.backends.memcached import BaseMemcachedCache
BaseMemcachedCache.close = lambda self, **kwargs: None

рдЕрдм рдореИрдВ рдПрдХ рдЕрд▓рдЧ рдФрд░ рдирдИ рддреНрд░реБрдЯрд┐ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдпрд╛ рдирд╣реАрдВ:

ProgrammingError: close cannot be used while an asynchronous query is underway

рдРрд╕рд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, 1in 10/15 рдЕрдиреБрд░реЛрдз рдПрдХ рдореЙрдбрд▓ рдкрд░ рдЧрд┐рдирддреА рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ рдЬреЛ рдЕрдм рдЦреБрд▓рд╛ рд╣реИред

@ рдмреНрд░реЛрдХрд╣реЗрд╡реБрдб рдХреВрд▓! рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдЕрд╣рд╛рдЯ рдЬреАрд╡реЗрдВрдЯ рдХрд╛ рдЖрдкрдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ? рдЖрдкрдХреА рдирд╡реАрдирддрдо рддреНрд░реБрдЯрд┐ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред

рдпрд╛рд╣, рдЕрдЪреНрдЫреА рдЦрдмрд░! gevent рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 1.0.1 рдкрд░ред

@tilgovi рддреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ рдереНрд░реЗрдб рдмрдВрджрд░ рдкреИрдЪрд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛рдХрд░ рдЧрдирд┐рдХреЛрд░реНрди рдХреЛ рдкреИрдЪ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╢рд╛рдпрдж рд╣рдореЗрдВ рднреА рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП wsgi.multithread рд╕реЗ False ? рд╡рд┐рдЪрд╛рд░?

@benoitc рдореИрдВ рдЙрд╕ рдирдИ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдКрдкрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ Django рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рджреГрд╢реНрдп рд╣реИ рдФрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЙрдбрд▓ рдХреНрд╡реЗрд░реА рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдореИрдВ рдПрдХрд╛рдзрд┐рдХ рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдз рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рддреЛ рдЧрд┐рдирддреА рдХрд░рддрд╛ рд╣реВрдВред

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдШрдЯрдХ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкрд░рд╛рдзреА рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЧреАрд╡реЗрдВрдЯ рд╕рдорд╕реНрдпрд╛ рдпрд╛ рд╕рд╛рдЗрдХреЛрдЧреНрд░реАрди рд╣реИ?

рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╕рд╛рдЗрдХреЛрдЧреНрд░реАрдиред рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕реЗрдЯрдЕрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

def def_post_fork(server, worker):
    from psycogreen.gevent import psyco_gevent
    psyco_gevent.make_psycopg_green()
    worker.log.info("Made Psycopg Green")

рдУрд╣, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

def post_fork(server, worker):    
    from psycogreen.gevent import patch_psycopg
    patch_psycopg()

рдореИрдВ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред

рдпрджрд┐ рдореИрдВ рд╕рд╛рдЗрдХреЛрдЧреНрд░реАрди рдХрд╛ рдХреЛрдб рдкрдврд╝рддрд╛ рд╣реВрдВ рддреЛ рдЖрдкрдХрд╛ рдХреЛрдб рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИ:

https://bitbucket.org/dvarrazzo/psycogreen/src/115d0627da1ac9ff48c0cb9287257cd35868cdf9/psycogreen/gevent.py?at=master#cl -17

рдареАрдХ рд╣реИ, рдореИрдВ рд╕рд╛рдЗрдХреЛрдЧреНрд░реАрди рдХреЗ рд╕рд╛рде рдЯрд┐рдХрдЯ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реВрдБ

рдЖрдк рд╣реБрдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ post_worker_init рдХреЗ рдмрдЬрд╛рдп post_fork ?

рдкреЛрд╕реНрдЯ_рд╡рд░реНрдХрд░_рдЗрдирд┐рдЯ рдореЗрдВ рд╕рд╛рдЗрдХреЛрдЧреНрд░реАрди рдХреЛ рдкреИрдЪ рдХрд░рддреЗ рд╕рдордп рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рд╕рд╛рдЗрдХреЛрдЧреНрд░реАрди рдХреЛ рднреА рдЯрд┐рдХрдЯ рдЬрдорд╛ рдХрд┐рдпрд╛ рд╣реИ:
https://bitbucket.org/dvarrazzo/psycogreen/issue/2/databaseerror-used-with-asynchronous-query

@brockhaywood OK:/ рдХреЛ рдпрд╣ рд▓рд┐рдВрдХ рднреА рдорд┐рд▓рд╛: https://bitbucket.org/dvarrazzo/psycogreen-hg/issue/1/databaseerror-execute-used-with ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реА рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рдерд╛ред

@brockhaywood рдХреНрдпрд╛ рдЖрдк рдХреЛрдб рдХрд╛ рдХреЛрдИ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВ рдХрд▓ рдЗрд╕реЗ рджреЗрдЦ рд▓реВрдВрдЧрд╛ред

рдпрд╣рд╛рдВ рд╕рд░рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
https://github.com/brockhaywood/gunicorn_gevent_issue

рдзрдиреНрдпрд╡рд╛рдж!

рд░рд╡рд┐рд╡рд╛рд░, рдордИ резрен, реирежрезрел рдЕрдкрд░рд╛рд╣реНрди резреж:рейрек рдмрдЬреЗ рдмреНрд░реЛрдХрд╣реЗрд╡реБрдб рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдпрд╣рд╛рдВ рд╕рд░рд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
https://github.com/brockhaywood/gunicorn_gevent_issue

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/927#issuecomment -102852497ред

@benoitc рдЗрд╕ рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?

@brockhaywood рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рдерд╛ред рдЪреВрдБрдХрд┐ рдореИрдВ рдХрд▓ рдПрдХ рдЙрдбрд╝рд╛рди рдореЗрдВ рдмрдВрдж рд╣реВрдБ, рдореИрдВ рд╡реИрд╕реЗ рднреА рдХрд░реВрдБрдЧрд╛ :)

рдзрдиреНрдпрд╡рд╛рдж
реирем рдордИ реирежрезрел рдХреЛ рджреЛрдкрд╣рд░ рез:резрен рдмрдЬреЗ, "рдмреЗрдиреЛрдЗрдЯ рдЪреЗрд╕рдиреНрдпреВ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@brockhaywood https://github.com/brockhaywood рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдордп рдирд╣реАрдВ рдерд╛
рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЪреВрдБрдХрд┐ рдореИрдВ рдХрд▓ рдПрдХ рдЙрдбрд╝рд╛рди рдореЗрдВ рдмрдВрдж рд╣реВрдБ, рдореИрдВ рд╡реИрд╕реЗ рднреА рдХрд░реВрдБрдЧрд╛ :)

-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/927#issuecomment -105652947ред

рдЬрдм рдореИрдВрдиреЗ рдпрд╣ рдзрд╛рдЧрд╛ рджреЗрдЦрд╛ рддреЛ рдмрд╕ рдЙрд╕реА рдбреЗрдЯрд╛рдмреЗрд╕рд╡рд╛рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реА gunicorn рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕реЗ preload_app рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:

  • Django == 1.7.7
  • рдЧреАрд╡реЗрдВрдЯ == 1.0.2
  • рдЧрдирд┐рдХреЛрд░реНрди==19.3.0
  • psycopg2==2.5.2
  • рд╕рд╛рдЗрдХреЛрдЧреНрд░реАрди == 1.0
  • Gunicorn PgBouncer рджреНрд╡рд╛рд░рд╛ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛

(рдЬрдм рд╕реЗ рд╣рдо рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рди рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рддрдм рд╕реЗ рдХреВрджрддреЗ рд╣реБрдП)

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╕рдорд╕реНрдпрд╛рдПрдБ #478 рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд░рд╣реА рд╣реИрдВ (рдорд╛рд╕реНрдЯрд░ рдХреЛ рдордВрдХреА рдкреИрдЪ рди рдХрд░реЗрдВ)ред

рдпрджрд┐ рдЖрдк рдЧреАрд╡реЗрдВрдЯ рд╡рд░реНрдХрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмрдВрджрд░ рджреНрд╡рд╛рд░рд╛ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдкреИрдЪ рди рдХрд░рдиреЗ рд╕реЗ, рдРрдк рдкреНрд░реАрд▓реЛрдб рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдмреЗрдореЗрд▓ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░реАрд▓реЛрдб рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рднреА рдРрдк рдХреЛрдб рдРрд╕реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ рдЬреЛ рдмрдВрджрд░ рдкреИрдЪ рдирд╣реАрдВ рд╣реИред рдХреЛрдИ рднреА рдРрдк рдХреЛрдб рдЬреЛ рд╡рд░реНрдХрд░ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ рд╡рд╣ рдордВрдХреА рдкреИрдЪ рд╡рд╛рд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдмрд╕ setup рдкрджреНрдзрддрд┐ рдХреЛ gevent рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдореЗрдВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ 18.x рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрд╛рдХрд┐ рдорд╛рд╕реНрдЯрд░ рдмрдВрджрд░ рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рдпрд╣ рдРрдк рдкреНрд░реАрд▓реЛрдб рд╕реЗ рдкрд╣рд▓реЗ рдмрдВрджрд░ рдкреИрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ, рд╕рднреА рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣рдорд╛рд░реЗ рдореБрджреНрджреЗред рдЗрд╕рдореЗрдВ DatabaseWrapper рдмрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХ рдЕрдиреНрдп рдореБрджреНрджрд╛ рдЬреЛ рд╣рдо рджреЗрдЦ рд░рд╣реЗ рдереЗ рдХрд┐ gevent рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╣рд╛рдВ рд▓рдЯрдХреЗрдВрдЧреЗ рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХрд░реЗрдВрдЧреЗред рдХреЛрдИ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдереЗ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдордВрдХреА рдкреИрдЪрд┐рдВрдЧ threads рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред

рдореИрдВ рдЕрднреА рднреА рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрдВрджрд░-рдкреИрдЪ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдВрдХреЛрдЪ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЧрдирд┐рдХреЛрд░реНрди рдХреЛ рдкреИрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╕рд░реНрд╡рд░ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХрд╣реАрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдпреЛрдЬрдирд╛ рдЗрд╕ рдкреИрдЪ рдХреЗ рд╕рд╛рде рдПрдХ (рдЖрдВрддрд░рд┐рдХ) рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛рдВрдЯрд╛ рдмрдирд╛рдиреЗ рдХреА рд╣реИред

рдореИрдВ рдЕрдкрдиреЗ wsgi рдХреЛрдб рдореЗрдВ рдПрдХ рдмрдВрджрд░ рдкреИрдЪ рдЪрд░рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдХреБрдЫ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдЧрдирд┐рдХреЛрд░реНрди рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ)ред рдкреНрд░реАрд▓реЛрдбреЗрдб рдРрдк рдХреЛрдб рдореЗрдВ рдкреИрдЪрд┐рдВрдЧ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛, рдФрд░ рдкреВрд░реА рдмрд╛рдд рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рдорд╛рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреА рдмрдВрджрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рдПред рдРрдк рдХреЛрдб рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдордВрдХреА рдкреИрдЪ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдРрдк рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЬреЛ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВ, рд╡реЗ рд╣рдореЗрд╢рд╛ рдЙрди рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрдЪрдЕрдк рдЦреЗрд▓реЗрдВрдЧреЗ рдЬреЛ рдЧрдирд┐рдХреЛрд░реНрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрдм/рдХреИрд╕реЗ рдпрд╣ рдмрдВрджрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдкреИрдЪ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдпрд╣ рдЬрд▓реНрджреА рдкреИрдЪ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╢рд╛рдпрдж рдЗрд╕реЗ рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрднреА рдРрд╕рд╛ рд╣реБрдЖ рдерд╛ рдФрд░ рдЕрдЧрд░ рдЗрд╕рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реБрдИрдВ, рд▓реЗрдХрд┐рди рдмрдВрджрд░ рдкреИрдЪрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдпрд╣ рд╣рдореЗрд╢рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рджрди рдЧрдирд┐рдХреЛрд░реНрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╣рдо рдРрдк рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рд░рд╛рдорд┐рдб/рдкреЗрд╕реНрдЯ рдХреА pserve рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЖрдИрдПрдирдЖрдИ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЧрдирд┐рдХреЛрд░реНрди рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ; рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рд░реИрдкрд░ рд╣реИ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдмрдВрджрд░-рдкреИрдЪрд┐рдВрдЧ ASAP рд╣реЛрддрд╛ рд╣реИ)ред

рдореИрдВ рдПрдХ рд╡рд░реНрддрдорд╛рди gevent рдЕрдиреБрдЪрд░ рд╣реВрдБред рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд┐рд╕реА рднреА рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрдХрд░ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛ рд░рд╣реА рд╣реИред рд╣рдо рдЬрд▓реНрдж рд╣реА 1.1 рдЫреЛрдбрд╝рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рдорд░реНрдерд┐рдд рд╡рд┐рдХрд▓реНрдк рдерд╛ред

рдореИрдВрдиреЗ рдЕрдкрдиреЗ wsgi рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рд╣реА рдмрдВрджрд░ рдкреИрдЪ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рдФрд░ рд╣рдордиреЗ DatabaseWrapper рдореБрджреНрджрд╛ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ - arbiter.py рдореЗрдВ wsgi рдЖрдордВрддреНрд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП , рдЙрд╕ рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рдж рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд╣рд╛рдВ GeventWorker.setup рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ( worker_class рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВред рдЕрдЧрд░ рдореИрдВ рдкрдврд╝ рд░рд╣рд╛ рд╣реВрдВ рдХреЛрдб рд╕рд╣реАред

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

@jamadden рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред

@jzupko рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреИрдЪрд┐рдВрдЧ рдХрд┐рд╕реА рднреА рдЖрдпрд╛рдд рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддреА рд╣реИ рдЬреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рд╣реБрдХ рдореЗрдВ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдЬреИрд╕реЗ post_fork рдлрд╝рдВрдХреНрд╢рди рдХреЛ gunicorn.conf.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбрд╛рд▓рдХрд░ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рд░реНрд╡рд░ рд╣реБрдХ рд╕реЗ рдкрд╣рд▓реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рдРрд╕рд╛ рдХрд╣рд╛рдВ рдХрд░реЗрдЧрд╛ред

@benoitc рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрдВрддреНрд░ рд╣реИ?

рдореИрдВ рдЗрд╕реЗ рд░рд┐рд▓реАрдЬ 20 рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рдореЗрдВ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдмрдВрджрд░ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдкреИрдЪ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ # 478 рдЬреИрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреЗрд╢ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@tilgovi рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА setup рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд╛рдпреА рд╕реБрдзрд╛рд░ рд╣реИ рдЬрдм рддрдХ рдХрд┐ 20.0 рдмрд╛рд╣рд░ рди рд╣реЛ рдЬрд╛рдП? рдпрд╛ preload_app рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдпрд╛ 18.0 рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ?

@fletom рдЕрд╕реНрдерд╛рдпреА рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП? рдХреНрдпрд╛ рдЖрдкрдиреЗ рдирд╡реАрдирддрдо рдорд╛рд╕реНрдЯрд░ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА? рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

@benoitc рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ "

рд╡рд░реНрддрдорд╛рди рдЧрдирд┐рдХреЛрд░реНрди рдорд╛рд╕реНрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ 19.6.0 рдкрд░ рдореБрдЭреЗ рдпрд╣ (рд╕рд╛рдорд╛рдиреНрдп) рдорд┐рд▓рддрд╛ рд╣реИ:

[2017-01-05 15:46:32 -0500] [3222] [INFO] Starting gunicorn 19.6.0
[2017-01-05 15:46:32 -0500] [3222] [INFO] Listening at: http://127.0.0.1:8000 (3222)
[2017-01-05 15:46:32 -0500] [3222] [INFO] Using worker: gevent
[2017-01-05 15:46:32 -0500] [3226] [INFO] Booting worker with pid: 3226
[2017-01-05 15:46:32 -0500] [3227] [INFO] Booting worker with pid: 3227
[2017-01-05 15:46:32 -0500] [3228] [INFO] Booting worker with pid: 3228
[2017-01-05 15:46:32 -0500] [3229] [INFO] Booting worker with pid: 3229

рдФрд░ рдирд╡реАрдирддрдо рдорд╛рд╕реНрдЯрд░ рдкрд░ 100% рд╕рдЯреАрдХ рдЙрд╕реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдореБрдЭреЗ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐рд╕реА рднреА рдмрдВрджрд░рдЧрд╛рд╣ рдкрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╕реБрди рд░рд╣рд╛ рд╣реИ:

[2017-01-05 15:47:19 -0500] [3308] [INFO] Starting gunicorn 19.6.0
[2017-01-05 15:47:19 -0500] [3308] [INFO] Listening at:  (3308)
[2017-01-05 15:47:19 -0500] [3308] [INFO] Using worker: gevent
[2017-01-05 15:47:19 -0500] [3312] [INFO] Booting worker with pid: 3312
[2017-01-05 15:47:19 -0500] [3313] [INFO] Booting worker with pid: 3313
[2017-01-05 15:47:19 -0500] [3314] [INFO] Booting worker with pid: 3314
[2017-01-05 15:47:19 -0500] [3315] [INFO] Booting worker with pid: 3315

рдЧрдбрд╝рдмрдбрд╝ рд▓рдЧ рд░рд╣рд╛ рд╣реИ?

@fletom рдЖрдк

@benoitc рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ gunicorn -c gunicorn_conf.py <appname>.wsgi ред

рдореЗрд░рд╛ gunicorn_conf.py рд╣реИ:

workers = 4

worker_class = 'gevent'

preload_app = False

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ gunicorn==18.0 рд╕рд╛рде рдареЛрдХрд░ рдЦрд╛ рд░рд╣рд╛ рд╣реВрдВред Gunicorn_conf.py рдореЗрдВ рдореЗрд░реЗ рдкрд╛рд╕ worker_class = 'gevent' , preload_app = True рдФрд░ рдХрд╕реНрдЯрдо pre_fork , on_starting рдФрд░ on_reload рдлрд╝рдВрдХреНрд╢рди рд╣реИрдВред

рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ gunicorn_conf.py рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд░рдЦрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рд▓рдЧрддрд╛ рд╣реИ:

import gevent.monkey
gevent.monkey.patch_thread()

рдЕрджреНрдпрддрди:
рдореЗрд░реЗ рдкрд╛рд╕ рдореЗрд░реЗ gunicorn.conf рдореЗрдВ рдпреЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВред рдЙрдирд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рд╕реЗ рдмрдВрджрд░-рдкреИрдЪрд┐рдВрдЧ рдХреЗ рдмрд┐рдирд╛ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред

import django
django.setup()

рдЙрдирдХреА рд╡рдЬрд╣ рд╕реЗ django рдиреЗ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рдордВрдХреА-рдкреИрдЪрд┐рдВрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд┐рдпрд╛ред

@gukoff рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ

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

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Abraxos picture Abraxos  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

twosigmajab picture twosigmajab  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

vaibhavpatil123 picture vaibhavpatil123  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gr790 picture gr790  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mrwillis picture mrwillis  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ