рдирдорд╕реНрддреЗ,
рдореИрдВ 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
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред
рдкрд╣рд▓реЗ рдмрд╕ рдПрдХ рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдкреНрд░реАрд▓реЛрдб рд╡рд┐рдХрд▓реНрдк рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдмрддрд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдпрджрд┐ рдЙрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдорджрдж рдорд┐рд▓рддреА рд╣реИ, рддреЛ рд╣рдордиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реЛрдЧрд╛ рдХрд┐ 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()
рдореИрдВ рдЖрдкрдХреЗ рд╕реБрдЭрд╛рд╡ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реВрдВрдЧрд╛ред
рдпрджрд┐ рдореИрдВ рд╕рд╛рдЗрдХреЛрдЧреНрд░реАрди рдХрд╛ рдХреЛрдб рдкрдврд╝рддрд╛ рд╣реВрдВ рддреЛ рдЖрдкрдХрд╛ рдХреЛрдб рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИ:
рдареАрдХ рд╣реИ, рдореИрдВ рд╕рд╛рдЗрдХреЛрдЧреНрд░реАрди рдХреЗ рд╕рд╛рде рдЯрд┐рдХрдЯ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реВрдБ
рдЖрдк рд╣реБрдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ 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
рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╣рдЯрд╛рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЬрд╛рддреА рд╣реИред рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:
(рдЬрдм рд╕реЗ рд╣рдо рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рдорд╛рди рдореБрджреНрджреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рддрдм рд╕реЗ рдХреВрджрддреЗ рд╣реБрдП)
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╕рдорд╕реНрдпрд╛рдПрдБ #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 рдореЗрдВ рдПрдХ рдмрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред рдпрджрд┐ рдЖрдк рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдпрд╣ рдПрдХ рдкреБрд░рд╛рдирд╛ рдЯрд┐рдХрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рдХрдИ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдмрд╛рддрдЪреАрдд рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@gukoff рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдлрд┐рдХреНрд╕ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ