Gunicorn: рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рдЪрд▓рд╛рддреЗ рд╕рдордп рдХреНрд░рд┐рдЯрд┐рдХрд▓ рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 5 рдЬреВрди 2018  ┬╖  82рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: benoitc/gunicorn

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ [CRITICAL] WORKER TIMEOUT рддреНрд░реБрдЯрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рд░рд┐рдкреЛрд░реНрдЯреЗрдВ рдЖ рдЪреБрдХреА рд╣реИрдВ рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╕ рдкреЙрдк рдЕрдк рд╣реЛрддреА рд░рд╣рддреА рд╣реИред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдореБрджреНрджрд╛ рд╣реИред

рдореИрдВ рдпрд╣ рдлреНрд▓рд╛рд╕реНрдХ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВред

from flask import Flask
application = Flask(__name__)

@application.route('/')
def hello_world():
    return 'Hello, World!'

рдЧрдирд┐рдХреЛрд░реНрди рдХрдорд╛рдВрдб рдпрд╣ рд╣реИ:

gunicorn -b 0.0.0.0:5000 --log-level=debug hello

рдФрд░ рдпрд╣ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ:

[2018-06-05 14:56:21 +0200] [11229] [INFO] Starting gunicorn 19.8.1
[2018-06-05 14:56:21 +0200] [11229] [DEBUG] Arbiter booted
[2018-06-05 14:56:21 +0200] [11229] [INFO] Listening at: http://0.0.0.0:5000 (11229)
[2018-06-05 14:56:21 +0200] [11229] [INFO] Using worker: sync
[2018-06-05 14:56:21 +0200] [11232] [INFO] Booting worker with pid: 11232
[2018-06-05 14:56:21 +0200] [11229] [DEBUG] 1 workers
[2018-06-05 14:56:32 +0200] [11232] [DEBUG] GET /
[2018-06-05 14:56:57 +0200] [11232] [DEBUG] Closing connection. 
[2018-06-05 14:57:16 +0200] [11232] [DEBUG] GET /
[2018-06-05 14:57:47 +0200] [11229] [CRITICAL] WORKER TIMEOUT (pid:11232)
[2018-06-05 14:57:47 +0200] [11232] [INFO] Worker exiting (pid: 11232)
[2018-06-05 14:57:47 +0200] [11324] [INFO] Booting worker with pid: 11324

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рдорд┐рд▓рддреА рд╣реИ рдФрд░ рдпрджрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдЗрд╕рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ? рдореИрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдареАрдХ рдХрд░реВрдВ рдпрд╛ рдпрджрд┐ рдпрд╣ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ рддреЛ рдлрд┐рд░ рдЧрдВрднреАрд░ рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ?

Investigation unconfirmed

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

рдЧреАрд╡реЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЧ рдареАрдХ рдирд╣реАрдВ рд╣реБрдЖред

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

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

  • Gunicorn рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
  • Gunicorn рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рд╣рдореЗрдВ рдЕрдкрдиреЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдмрддрд╛рдПрдВред

  • Gunicorn рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
    => рдореИрдВ рд╕рд┐рд░реНрдл рдХреНрд░реЛрдорд┐рдпрдо рд╕реЗ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реВрдВ: http://localhost :5000/
  • Gunicorn рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
    => рдХреЛрдИ рдкреНрд░реЙрдХреНрд╕реА рдирд╣реАрдВ, рдмрд╕ Gunicorn + Flask

рдореИрдВрдиреЗ рдЕрднреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирдП рд╕реЗрдЯрдЕрдк рдкрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдЪрд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:

mkdir gunicorn
cd gunicorn/
pipenv --python 3.6
pipenv install flask
pipenv install gunicorn
vim hello.py
pipenv shell
gunicorn -b 0.0.0.0:5000 --log-level=debug hello

hello.py рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдлреНрд▓рд╛рд╕реНрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреИрд╕рд╛ рдореИрдВрдиреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред
рдиреАрдЪреЗ рдкреВрд░рд╛ рд▓реЙрдЧ рд╣реИред

~$ gunicorn -b 0.0.0.0:5000 --log-level=debug hello
[2018-06-06 09:16:21 +0200] [19829] [DEBUG] Current configuration:
  config: None
  bind: ['0.0.0.0:5000']
  backlog: 2048
  workers: 1
  worker_class: sync
  threads: 1
  worker_connections: 1000
  max_requests: 0
  max_requests_jitter: 0
  timeout: 30
  graceful_timeout: 30
  keepalive: 2
  limit_request_line: 4094
  limit_request_fields: 100
  limit_request_field_size: 8190
  reload: False
  reload_engine: auto
  reload_extra_files: []
  spew: False
  check_config: False
  preload_app: False
  sendfile: None
  reuse_port: False
  chdir: /home/dima/work/gunicorn
  daemon: False
  raw_env: []
  pidfile: None
  worker_tmp_dir: None
  user: 1000
  group: 985
  umask: 0
  initgroups: False
  tmp_upload_dir: None
  secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
  forwarded_allow_ips: ['127.0.0.1']
  accesslog: None
  disable_redirect_access_to_syslog: False
  access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
  errorlog: -
  loglevel: debug
  capture_output: False
  logger_class: gunicorn.glogging.Logger
  logconfig: None
  logconfig_dict: {}
  syslog_addr: udp://localhost:514
  syslog: False
  syslog_prefix: None
  syslog_facility: user
  enable_stdio_inheritance: False
  statsd_host: None
  statsd_prefix: 
  proc_name: None
  default_proc_name: hello
  pythonpath: None
  paste: None
  on_starting: <function OnStarting.on_starting at 0x7f9757112d08>
  on_reload: <function OnReload.on_reload at 0x7f9757112e18>
  when_ready: <function WhenReady.when_ready at 0x7f9757112f28>
  pre_fork: <function Prefork.pre_fork at 0x7f9756c230d0>
  post_fork: <function Postfork.post_fork at 0x7f9756c231e0>
  post_worker_init: <function PostWorkerInit.post_worker_init at 0x7f9756c232f0>
  worker_int: <function WorkerInt.worker_int at 0x7f9756c23400>
  worker_abort: <function WorkerAbort.worker_abort at 0x7f9756c23510>
  pre_exec: <function PreExec.pre_exec at 0x7f9756c23620>
  pre_request: <function PreRequest.pre_request at 0x7f9756c23730>
  post_request: <function PostRequest.post_request at 0x7f9756c237b8>
  child_exit: <function ChildExit.child_exit at 0x7f9756c238c8>
  worker_exit: <function WorkerExit.worker_exit at 0x7f9756c239d8>
  nworkers_changed: <function NumWorkersChanged.nworkers_changed at 0x7f9756c23ae8>
  on_exit: <function OnExit.on_exit at 0x7f9756c23bf8>
  proxy_protocol: False
  proxy_allow_ips: ['127.0.0.1']
  keyfile: None
  certfile: None
  ssl_version: 2
  cert_reqs: 0
  ca_certs: None
  suppress_ragged_eofs: True
  do_handshake_on_connect: False
  ciphers: TLSv1
  raw_paste_global_conf: []
[2018-06-06 09:16:21 +0200] [19829] [INFO] Starting gunicorn 19.8.1
[2018-06-06 09:16:21 +0200] [19829] [DEBUG] Arbiter booted
[2018-06-06 09:16:21 +0200] [19829] [INFO] Listening at: http://0.0.0.0:5000 (19829)
[2018-06-06 09:16:21 +0200] [19829] [INFO] Using worker: sync
[2018-06-06 09:16:21 +0200] [19832] [INFO] Booting worker with pid: 19832
[2018-06-06 09:16:22 +0200] [19829] [DEBUG] 1 workers
[2018-06-06 09:16:48 +0200] [19832] [DEBUG] GET /
[2018-06-06 09:17:19 +0200] [19829] [CRITICAL] WORKER TIMEOUT (pid:19832)
[2018-06-06 09:17:19 +0200] [19832] [INFO] Worker exiting (pid: 19832)
[2018-06-06 09:17:19 +0200] [19872] [INFO] Booting worker with pid: 19872
^C[2018-06-06 09:17:26 +0200] [19829] [INFO] Handling signal: int
[2018-06-06 09:17:26 +0200] [19872] [INFO] Worker exiting (pid: 19872)
[2018-06-06 09:17:26 +0200] [19829] [INFO] Shutting down: Master
~$ pip list
Package      Version
------------ -------
click        6.7    
Flask        1.0.2  
gunicorn     19.8.1 
itsdangerous 0.24   
Jinja2       2.10   
MarkupSafe   1.0    
pip          10.0.1 
setuptools   39.2.0 
Werkzeug     0.14.1 
wheel        0.31.1

@bigunyak рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдХрд╛рд░рдг рд╣реИ, рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ 30 рдХреЗ рд▓рд┐рдП рдЪреБрдк рд░рд╣рд╛ рд╣реИред http://docs.gunicorn.org/hi/stable/settings.html#timeout

рдЕрдкрдиреЗ рд▓реЙрдЧ рд╕реЗ,

[2018-06-05 14:57:16 +0200] [11232] [DEBUG] GET /
[2018-06-05 14:57:47 +0200] [11229] [CRITICAL] WORKER TIMEOUT (pid:11232)
[2018-06-06 09:16:48 +0200] [19832] [DEBUG] GET /
[2018-06-06 09:17:19 +0200] [19829] [CRITICAL] WORKER TIMEOUT (pid:19832)

рдореИрдВ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ: рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░рдиреЗ рдкрд░ рднреА рдХрд░реНрдордЪрд╛рд░реА рдЯрд╛рдЗрдо рдЖрдЙрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕ рд▓рд┐рд╣рд╛рдЬ рд╕реЗ, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрддрд░ рдХрд╛ рд▓реЙрдЧ рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдЧреАрд╡реЗрдВрдЯ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЗрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХреЗред

рдЗрд╕ рд▓рд┐рд╣рд╛рдЬ рд╕реЗ, рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрддрд░ рдХрд╛ рд▓реЙрдЧ рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

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

рдореИрдВ рдЗрд╕реЗ рднреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ ( examples/test.py рд╕рд╛рде gunicorn test:app -b localhost:9595 --log-level=debug --timeout=5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд) рдФрд░ рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрддрд░ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдореИрдВ рдареАрдХ рд╣реВрдВ рдЗрд╕реЗ рдбреАрдмрдЧ рд╕реНрддрд░ рдореЗрдВ рдмрджрд▓ рджреЗрдВред @benoitc @tilgovi рдЖрдк рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рд╕реНрддрд░ рдереЛрдбрд╝рд╛ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ Win10 рдкрд░ MSYS2 рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдерд╛ рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рд╣рд▓ рд╣реЛ рд╕рдХрд╛ред

inform() of ...\gunicorn\workers\workertmp.py, os.fchmod рдореВрд▓ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдордПрд╕рд╡рд╛рдИрдПрд╕ рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред os.fchmod рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ os.utime рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдХреЛрдб рдХрд╛ рдкрд╛рд▓рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

    def notify(self):
        try:
            self.spinner = (self.spinner + 1) % 2
            os.fchmod(self._tmp.fileno(), self.spinner)
            if PLATFORM.startswith('MSYS') :
                os.utime(self._tmp.fileno(), None)
        except AttributeError:
            # python < 2.6
            self._tmp.truncate(0)
            os.write(self._tmp.fileno(), b"X")

@berkerpeksag рдореИрдВ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рддрднреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╕рдордп рдХреЗ рд▓рд┐рдП > рдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд░рдЦрд╛ рдЧрдпрд╛ рд╣реЛред рдЗрд╕рд▓рд┐рдП рддреНрд░реБрдЯрд┐ рдЧрдВрднреАрд░ рд╣реИред рдЖрдИрдПрдордУ рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрджрд┐ рддреНрд░реБрдЯрд┐ рддрдм рднреА рд╣реЛрддреА рд╣реИ рдЬрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рд╡реНрдпрд╕реНрдд рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдХреБрдЫ рдФрд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╢рд╛рдпрдж рдПрдХ рдмрдЧ рд╣реИред

[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ]
рдореЗрд░реЗ рд▓рд┐рдП рд╡рд╣реА рдмрдЧред
Django 1.10/gunicorn 19.6.0/рдкрд╛рдпрдерди 2.7.15 рдХреЗ рд╕рд╛рде python2.7-alpine рдореЗрдВ рдбреЗрдмрд┐рдпрди 8.8 рдФрд░ рд╕реНрдЯреЙрдХ рдХрд░реНрдиреЗрд▓ 3.16 рдкрд░, рд╕рднреА рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдереЗред
Django 1.11 рдФрд░ gunicorn 19.8.1 рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ [рдХреНрд░рд┐рдЯрд┐рдХрд▓ рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ] рдХреЗ рд╕рд╛рде рдмреВрдЯ рдореЗрдВ рд╡рд┐рдлрд▓ рд╣реЛрддреЗ рд░рд╣рддреЗ рд╣реИрдВред
рдЧрдирд┐рдХреЛрд░реНрди рдХреЛ 19.6.0 рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рд╣рдордиреЗ рд╣реЛрд╕реНрдЯ рдХрд░реНрдиреЗрд▓ рдХреЛ 4.9.0 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ (рдпрд╣ рд╢реЗрдбреНрдпреВрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рдФрд░ рд╢реНрд░рдорд┐рдХреЛрдВ рдиреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмреВрдЯ рдХрд┐рдпрд╛ред
рд▓реЗрдХрд┐рди:

  • рд╣рдо 4 рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ
  • Django рдРрдк рдХреЛ рдареАрдХ 4 рдХреЙрд▓ рдХреЗ рдмрд╛рдж, рдЕрдЧрд▓реА рдХреЙрд▓ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛ рдЬрд╛рдПрдЧреА, рд▓реЙрдЧ рдореЗрдВ [рдХреНрд░рд┐рдЯрд┐рдХрд▓ рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ] рджрд┐рдЦрд╛ рд░рд╣реА рд╣реИ
  • linux top рдХрдорд╛рдВрдб 4 рдЧрдирд┐рдХреЛрд░реНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ CPU рдЦрдкрдд рдХреЗ рд╕рд╛рде рдЕрдЯрдХреА рд╣реБрдИ рд╣реИрдВред

рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдирд┐рдХреЛрд░реНрди рдЬреАрд╡реЗрдВрдЯ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЕрдкрдиреЗ рдРрдк рдХреЛ рдСрдирд▓рд╛рдЗрди рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред

рдЧреАрд╡реЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдмрдЧ рдареАрдХ рдирд╣реАрдВ рд╣реБрдЖред

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @neocolor рдиреЗ MSYS рдХреЗ рддрд╣рдд рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрдЧ рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИред рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@bigunyak рдЖрдк рдХрд┐рд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ? рдореИрдВрдиреЗ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдЪрд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рд╕реЗ рдХрдИ рдврд╛рдВрдЪреЗ рдкрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╕рд╣рдордд рд╣реИред рдореЗрд░реА рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдкреНрд░рдгрд╛рд▓реА рдирд╣реАрдВ рдмрджрд▓реА рд╣реИред рдореИрдХреЛрдЬрд╝ 10.13.6 рдкрд░ рдореЗрд░рд╛ рдордВрдЪ рдкрд╛рдпрдерди 3.7 рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдкрд╛рдЗрдерди 2.7 рдФрд░ 3.6.5 рдкрд░ рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди рдЪрд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬрдм рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реИрдз рд░реВрдк рд╕реЗ рд▓рдВрдмреЗ рдЕрдиреБрд░реЛрдз рд╣реЛрддреЗ рд╣реИрдВред

@Tberdy рдХреЗ рд▓рд┐рдП : рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк --worker-tmp-dir рдХреЛ tmpfs рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд╣рд░ рдХрд╣реАрдВ рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ? рдореИрдВ рдмрд╕ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╢рд╛рдпрдж рдЕрд▓реНрдкрд╛рдЗрди рдпрд╛ рдбреЙрдХрдЯрд░ рдпрд╛ рд╕рдВрдпреЛрдЬрди рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдордзреНрдпрд╕реНрде рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдбреЙрдХрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд tmpfs рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП #1388 рднреА рджреЗрдЦреЗрдВред

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдореБрджреНрджрд╛ рд╣реИред

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

@ timoj58 @cjmash рдЖрдк рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рд╕рдХрддреЗ рд╣реИрдВ? рдЖрдк рдЧрдирд┐рдХреЛрд░реНрди рдХреИрд╕реЗ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ (рдПрдХ рд╡реАрдПрдо рдореЗрдВ?, рд╡рд┐рдХрд▓реНрдк ...), рдХреМрди рд╕рд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо, рдУрдПрд╕? рдХреБрдЫ рднреА рдЬреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ :)

@benoitc рдореИрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рдЕрдкрдирд╛ Django рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдирд┐рдХреЛрд░реНрди рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, рдореЗрд░реЗ рдЧрдирд┐рдХреЛрд░реНрди рддрд░реНрдХ рд╣реИрдВ --bind=$port --workers=7 --timeout=1200 --log-level=debug --access-logfile - error-logfile - "

рд▓реЙрдЧ рд╕реЗ рдореБрдЭреЗ рдЬреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓рддреА рд╣реИрдВ

`` `рдИ [2018-08-09 21:47:56 +0000] [13] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 13

рдИ [2018-08-09 21:47:56 +0000] [14] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 14

рдИ [2018-08-09 21:47:56 +0000] [12] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 12

рдИ [2018-08-09 21:47:56 +0000] [1] [рдбреАрдмрдЧ] 7 рдХрд░реНрдордЪрд╛рд░реА

рдИ [2018-08-09 21:47:56 +0000] [11] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 11

рдИ [2018-08-09 21:47:55 +0000] [10] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 10

рдИ [2018-08-09 21:47:55 +0000] [9] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 9

рдИ [2018-08-09 21:47:55 +0000] [8] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 8

рдИ [2018-08-09 21:47:55 +0000] [1] [рд╕реВрдЪрдирд╛] рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рд╕рд┐рдВрдХ

рдИ [2018-08-09 21:47:55 +0000] [1] [рд╕реВрдЪрдирд╛] рдпрд╣рд╛рдВ рд╕реБрди рд░рд╣рд╛ рд╣реИ: http://0.0.0.0 :4040 (1)

рдИ [2018-08-09 21:47:55 +0000] [1] [рдбреАрдмрдЧ] рдЖрд░реНрдмрд┐рдЯрд░ рдмреВрдЯ рд╣реБрдЖ

рдИ [2018-08-09 21:47:55 +0000] [1] [рдЬрд╛рдирдХрд╛рд░реА] рдЧрдирд┐рдХреЛрд░реНрди 19.7.1 рд╢реБрд░реВ

рдИ рд░реЙ_рдкреЗрд╕реНрдЯ_рдЧреНрд▓реЛрдмрд▓_рдХреЙрдиреНрдл: []

рдИ рд╕рд┐рдлрд░: TLSv1

рдИ do_handshake_on_connect: рдЭреВрдард╛

рдИ рд╕рдкреНрд░реЗрд╕_рд░реИрдЧреНрдб_рдИрдУрдлрд╝реНрд╕: рд╕рдЪ

рдИ ca_certs: рдХреЛрдИ рдирд╣реАрдВ

рдИ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ_рд░реЗрдХ: 0

рдИ рдПрд╕рдПрд╕рдПрд▓_рд╕рдВрд╕реНрдХрд░рдг: 2

рдИ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдХреАрдлрд╛рдЗрд▓: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдкреНрд░реЙрдХреНрд╕реА_рдЖрд▓реЛ_рдЖрдИрдкреА: ['127.0.0.1']

рдИ рдкреНрд░реЙрдХреНрд╕реА_рдкреНрд░реЛрдЯреЛрдХреЙрд▓: рдЧрд▓рдд

рдИ рдСрди_рдПрдЧреНрдЬрд┐рдЯ:

рдИ nworkers_changed:

рдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ:

рдИ рдЪрд╛рдЗрд▓реНрдб_рдПрдЧреНрдЬрд┐рдЯ:

рдИ рдкреЛрд╕реНрдЯ_рдЕрдиреБрд░реЛрдз:

рдИ рдкреВрд░реНрд╡_рдЕрдиреБрд░реЛрдз:

рдИ pre_exec:

рдИ рд╡рд░реНрдХрд░_рдПрдмреЙрд░реНрдЯ:

рдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_рдЗрдВрдЯ:

рдИ рдкреЛрд╕реНрдЯ_рд╡рд░реНрдХрд░_рдЗрдирд┐рдЯ:

рдИ рдкреЛрд╕реНрдЯ_рдлреЛрд░реНрдХ:

рдИ рдкреНрд░реА_рдлреЛрд░реНрдХ:

рдИ рдЬрдм_рд░реЗрдбреА:

рдИ рдСрди_рд░реАрд▓реЛрдб:

рдИ рдСрди_рд╕реНрдЯрд╛рд░реНрдЯрд┐рдВрдЧ:

рдИ рдкреЗрд╕реНрдЯ: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдкрд╛рдпрдердирдкрде: рдХреЛрдИ рдирд╣реАрдВ

рдИ default_proc_name: art.wsgi

рдИ proc_name: рдХреЛрдИ рдирд╣реАрдВ

рдИ statsd_prefix:

рдИ statsd_host: рдХреЛрдИ рдирд╣реАрдВ

рдИ enable_stdio_inheritance: рдЧрд▓рдд

рдИ syslog_facility: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛

рдИ syslog_prefix: рдХреЛрдИ рдирд╣реАрдВ

рдИ рд╕рд┐рд╕рд▓реЙрдЧ: рдЭреВрдард╛

рдИ syslog_addr: udp://localhost :514

рдИ рд▓реЙрдЧрдХреЙрдиреНрдлрд┐рдЧ: рдХреЛрдИ рдирд╣реАрдВ

рдИ рд▓реЙрдЧрд░_рдХреНрд▓рд╛рд╕: gunicorn.glogging.Logger

рдИ рдХреИрдкреНрдЪрд░_рдЖрдЙрдЯрдкреБрдЯ: рдЧрд▓рдд

рдИ рд▓реЙрдЧрд▓реЗрд╡рд▓: рдбрд┐рдмрдЧ

рдИ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ: -

рдИ access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%( рдЬреИрд╕рд╛"

рдИ рдПрдХреНрд╕реЗрд╕рд▓реЙрдЧ:-

рдИ рдЕрдЧреНрд░реЗрд╖рд┐рдд_рдЕрдиреБрдорддрд┐_ips: ['127.0.0.1']

рдИ Secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}

рдИ tmp_upload_dir: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдЗрдирд┐рдЯрдЧреНрд░реБрдкреНрд╕: рдЕрд╕рддреНрдп

рдИ рдЙрдорд╛рд╕реНрдХ: 0

рдИ рд╕рдореВрд╣: 0

рдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: 0

рдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_tmp_dir: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдкрд┐рдбрдлрд╛рдЗрд▓: рдХреЛрдИ рдирд╣реАрдВ

рдИ рд░реЙ_рдПрдирд╡реА: []

рдИ рдбреЗрдорди: рдЭреВрдард╛

рдИ chdir: /usr/src/app

рдИ рд╕реЗрдВрдбрдлрд╛рдЗрд▓: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдкреНрд░реАрд▓реЛрдб_рдРрдк: рдЧрд▓рдд

рдИ check_config: рдЧрд▓рдд

рдИ рд╕реНрдкреВ: рдЭреВрдард╛

рдИ рд░реАрд▓реЛрдб_рдЗрдВрдЬрд┐рди: рдСрдЯреЛ

рдИ рдкреБрдирдГ рд▓реЛрдб: рдЧрд▓рдд

рдИ рд▓рд┐рдорд┐рдЯ_рд░реЗрдХреНрд╡реЗрд╕реНрдЯ_рдлреАрд▓реНрдб_рд╕рд╛рдЗрдЬ: 8190

рдИ рд╕реАрдорд╛_рдЕрдиреБрд░реЛрдз_рдлрд╝реАрд▓реНрдб: 100

рдИ рд▓рд┐рдорд┐рдЯ_рд░реЗрдХреНрд╡реЗрд╕реНрдЯ_рд▓рд╛рдЗрди: 4094

рдИ рд░рдЦрд╡рд╛рд▓реЗ: 2

рдИ рдЧреНрд░реЗрд╕рдлреБрд▓_рдЯрд╛рдЗрдордЖрдЙрдЯ: 30

рдИ рдЯрд╛рдЗрдордЖрдЙрдЯ: 1200

рдИ max_requests_jitter: 0

рдИ рдЕрдзрд┐рдХрддрдо_рдЕрдиреБрд░реЛрдз: 0

рдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_рдХрдиреЗрдХреНрд╢рди: 1000

рдИ рдзрд╛рдЧреЗ: 1

рдИ рд╡рд░реНрдХрд░_рдХреНрд▓рд╛рд╕: рд╕рд┐рдВрдХ

рдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 7

рдИ рдмреИрдХрд▓реЙрдЧ: 2048

рдИ рдмрд╛рдЗрдВрдб: ['0.0.0.0:4040']

рдИ рд╡рд┐рдиреНрдпрд╛рд╕: рдХреЛрдИ рдирд╣реАрдВ

рдИ [2018-08-09 21:47:55 +0000] [1] [рдбреАрдмрдЧ] рд╡рд░реНрддрдорд╛рди рд╡рд┐рдиреНрдпрд╛рд╕:

I рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдирд╣реАрдВред

рдореИрдВ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ:

рдореИрдВ рд╕рднреА рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реВрдВ: рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ, рдкреНрд░рдорд╛рдгрди, рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд░, рдХреЛрд░, рдбреИрд╢рдмреЛрд░реНрдб, рдЬреЗрдЯ, oauth2_provider, рд╕рддреНрд░

I рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

рдИ [2018-08-09 21:47:20 +0000] [13] [рд╕реВрдЪрдирд╛] рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ (рдкреАрдЖрдИрдбреА: 13)

рдИ os.path.dirname(os.path.dirname(__file__)), '.env'))

рдИ /usr/src/app/art/wsgi.py:19: UserWarning: рдирд╣реАрдВ рдкрдврд╝ рд░рд╣рд╛ /usr/src/app/.env - рдпрд╣ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИред

рдИ [2018-08-09 21:47:00 +0000] [21] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 21

рдИ [2018-08-09 21:47:00 +0000] [1] [рд╕реВрдЪрдирд╛] рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕рд┐рдЧреНрдирд▓: рдЯрд░реНрдо

рдИ [2018-08-09 21:46:35 +0000] [12] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 12

рдИ [2018-08-09 21:46:34 +0000] [13] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 13

рдИ [2018-08-09 21:46:34 +0000] [11] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 11

рдИ [2018-08-09 21:46:34 +0000] [1] [рдбреАрдмрдЧ] 7 рдХрд░реНрдордЪрд╛рд░реА

рдИ [2018-08-09 21:46:34 +0000] [10] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 10

рдИ [2018-08-09 21:46:34 +0000] [9] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 9

рдИ [2018-08-09 21:46:34 +0000] [8] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 8

рдИ [2018-08-09 21:46:34 +0000] [7] [рдЬрд╛рдирдХрд╛рд░реА] рдкреАрдЖрдИрдбреА тАЛтАЛрдХреЗ рд╕рд╛рде рдмреВрдЯрд┐рдВрдЧ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 7

рдИ [2018-08-09 21:46:34 +0000] [1] [рд╕реВрдЪрдирд╛] рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛: рд╕рд┐рдВрдХ

рдИ [2018-08-09 21:46:34 +0000] [1] [рд╕реВрдЪрдирд╛] рдпрд╣рд╛рдВ рд╕реБрди рд░рд╣рд╛ рд╣реИ: http://0.0.0.0 :4040 (1)

рдИ [2018-08-09 21:46:34 +0000] [1] [рдбреАрдмрдЧ] рдЖрд░реНрдмрд┐рдЯрд░ рдмреВрдЯ рд╣реБрдЖ

рдИ [2018-08-09 21:46:34 +0000] [1] [рд╕реВрдЪрдирд╛] рдЧрдирд┐рдХреЛрд░реНрди 19.7.1 рд╢реБрд░реВ рдХрд░рдирд╛

рдИ рд░реЙ_рдкреЗрд╕реНрдЯ_рдЧреНрд▓реЛрдмрд▓_рдХреЙрдиреНрдл: []

рдИ рд╕рд┐рдлрд░: TLSv1

рдИ do_handshake_on_connect: рдЭреВрдард╛

рдИ рд╕рдкреНрд░реЗрд╕_рд░реИрдЧреНрдб_рдИрдУрдлрд╝реНрд╕: рд╕рдЪ

рдИ ca_certs: рдХреЛрдИ рдирд╣реАрдВ

рдИ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ_рд░реЗрдХ: 0

рдИ рдПрд╕рдПрд╕рдПрд▓_рд╕рдВрд╕реНрдХрд░рдг: 2

рдИ рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдХреАрдлрд╛рдЗрд▓: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдкреНрд░реЙрдХреНрд╕реА_рдЖрд▓реЛ_рдЖрдИрдкреА: ['127.0.0.1']

рдИ рдкреНрд░реЙрдХреНрд╕реА_рдкреНрд░реЛрдЯреЛрдХреЙрд▓: рдЧрд▓рдд

рдИ рдСрди_рдПрдЧреНрдЬрд┐рдЯ:

рдИ nworkers_changed:

рдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ:

рдИ рдЪрд╛рдЗрд▓реНрдб_рдПрдЧреНрдЬрд┐рдЯ:

рдИ рдкреЛрд╕реНрдЯ_рдЕрдиреБрд░реЛрдз:

рдИ рдкреВрд░реНрд╡_рдЕрдиреБрд░реЛрдз:

рдИ pre_exec:

рдИ рд╡рд░реНрдХрд░_рдПрдмреЙрд░реНрдЯ:

рдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_рдЗрдВрдЯ:

рдИ рдкреЛрд╕реНрдЯ_рд╡рд░реНрдХрд░_рдЗрдирд┐рдЯ:

рдИ рдкреЛрд╕реНрдЯ_рдлреЛрд░реНрдХ:

рдИ рдкреНрд░реА_рдлреЛрд░реНрдХ:

рдИ рдЬрдм_рд░реЗрдбреА:

рдИ рдСрди_рд░реАрд▓реЛрдб:

рдИ рдСрди_рд╕реНрдЯрд╛рд░реНрдЯрд┐рдВрдЧ:

рдИ рдкреЗрд╕реНрдЯ: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдкрд╛рдпрдердирдкрде: рдХреЛрдИ рдирд╣реАрдВ

рдИ default_proc_name: art.wsgi

рдИ proc_name: рдХреЛрдИ рдирд╣реАрдВ

рдИ statsd_prefix:

рдИ statsd_host: рдХреЛрдИ рдирд╣реАрдВ

рдИ enable_stdio_inheritance: рдЧрд▓рдд

рдИ syslog_facility: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛

рдИ syslog_prefix: рдХреЛрдИ рдирд╣реАрдВ

рдИ рд╕рд┐рд╕рд▓реЙрдЧ: рдЭреВрдард╛

рдИ syslog_addr: udp://localhost :514

рдИ рд▓реЙрдЧрдХреЙрдиреНрдлрд┐рдЧ: рдХреЛрдИ рдирд╣реАрдВ

рдИ рд▓реЙрдЧрд░_рдХреНрд▓рд╛рд╕: gunicorn.glogging.Logger

рдИ рдХреИрдкреНрдЪрд░_рдЖрдЙрдЯрдкреБрдЯ: рдЧрд▓рдд

рдИ рд▓реЙрдЧрд▓реЗрд╡рд▓: рдбрд┐рдмрдЧ

рдИ рддреНрд░реБрдЯрд┐ рд▓реЙрдЧ: -

рдИ access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%( рдЬреИрд╕рд╛"

рдИ рдПрдХреНрд╕реЗрд╕рд▓реЙрдЧ:-

рдИ рдЕрдЧреНрд░реЗрд╖рд┐рдд_рдЕрдиреБрдорддрд┐_ips: ['127.0.0.1']

рдИ Secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}

рдИ tmp_upload_dir: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдЗрдирд┐рдЯрдЧреНрд░реБрдкреНрд╕: рдЕрд╕рддреНрдп

рдИ рдЙрдорд╛рд╕реНрдХ: 0

рдИ рд╕рдореВрд╣: 0

рдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛: 0

рдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_tmp_dir: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдкрд┐рдбрдлрд╛рдЗрд▓: рдХреЛрдИ рдирд╣реАрдВ

рдИ рд░реЙ_рдПрдирд╡реА: []

рдИ рдбреЗрдорди: рдЭреВрдард╛

рдИ chdir: /usr/src/app

рдИ рд╕реЗрдВрдбрдлрд╛рдЗрд▓: рдХреЛрдИ рдирд╣реАрдВ

рдИ рдкреНрд░реАрд▓реЛрдб_рдРрдк: рдЧрд▓рдд

рдИ check_config: рдЧрд▓рдд

рдИ рд╕реНрдкреВ: рдЭреВрдард╛

рдИ рд░реАрд▓реЛрдб_рдЗрдВрдЬрд┐рди: рдСрдЯреЛ

рдИ рдкреБрдирдГ рд▓реЛрдб: рдЧрд▓рдд

рдИ рд▓рд┐рдорд┐рдЯ_рд░реЗрдХреНрд╡реЗрд╕реНрдЯ_рдлреАрд▓реНрдб_рд╕рд╛рдЗрдЬ: 8190

рдИ рд╕реАрдорд╛_рдЕрдиреБрд░реЛрдз_рдлрд╝реАрд▓реНрдб: 100

рдИ рд▓рд┐рдорд┐рдЯ_рд░реЗрдХреНрд╡реЗрд╕реНрдЯ_рд▓рд╛рдЗрди: 4094

рдИ рд░рдЦрд╡рд╛рд▓реЗ: 2

рдИ рдЧреНрд░реЗрд╕рдлреБрд▓_рдЯрд╛рдЗрдордЖрдЙрдЯ: 30

рдИ рдЯрд╛рдЗрдордЖрдЙрдЯ: 1200

рдИ max_requests_jitter: 0

рдИ рдЕрдзрд┐рдХрддрдо_рдЕрдиреБрд░реЛрдз: 0

рдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛_рдХрдиреЗрдХреНрд╢рди: 1000

рдИ рдзрд╛рдЧреЗ: 1

рдИ рд╡рд░реНрдХрд░_рдХреНрд▓рд╛рд╕: рд╕рд┐рдВрдХ

рдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛: 7

рдИ рдмреИрдХрд▓реЙрдЧ: 2048

рдИ рдмрд╛рдЗрдВрдб: ['0.0.0.0:4040']

рдИ рд╡рд┐рдиреНрдпрд╛рд╕: рдХреЛрдИ рдирд╣реАрдВ

рдИ [2018-08-09 21:46:34 +0000] [1] [рдбреАрдмрдЧ] рд╡рд░реНрддрдорд╛рди рд╡рд┐рдиреНрдпрд╛рд╕:

```

рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рдВрдШрд░реНрд╖ рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдирд╡реАрдирддрдо рдЧрдирд┐рдХреЛрд░реНрди рд╕рдВрд╕реНрдХрд░рдг 19.9.0 рдореЗрдВ рд╣реИред
рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╣реИрдВ рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдореЗрд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдЖрд░реНрдХ рд▓рд┐рдирдХреНрд╕ x86_64 рдЬреАрдПрдирдпреВ/рд▓рд┐рдирдХреНрд╕ (рдХрд░реНрдиреЗрд▓ 4.17.2-1-рдПрдЖрд░рд╕реАрдПрдЪ), рдкрд╛рдпрдерди 3.6.5 рд╣реИ
рдпрд╣рд╛рдБ рдПрдХ рддрд╛рдЬрд╝рд╛ рд▓реЙрдЧ рдЯреНрд░реЗрд╕ рд╣реИред

~$┬аgunicorn -b 0.0.0.0:5000 --log-level=debug hello
[2018-08-10 09:48:40 +0200] [23114] [DEBUG] Current configuration:
  config: None
  bind: ['0.0.0.0:5000']
  backlog: 2048
  workers: 1
  worker_class: sync
  threads: 1
  worker_connections: 1000
  max_requests: 0
  max_requests_jitter: 0
  timeout: 30
  graceful_timeout: 30
  keepalive: 2
  limit_request_line: 4094
  limit_request_fields: 100
  limit_request_field_size: 8190
  reload: False
  reload_engine: auto
  reload_extra_files: []
  spew: False
  check_config: False
  preload_app: False
  sendfile: None
  reuse_port: False
  chdir: /home/dima/lerning/python/modules/gunicorn
  daemon: False
  raw_env: []
  pidfile: None
  worker_tmp_dir: None
  user: 1000
  group: 985
  umask: 0
  initgroups: False
  tmp_upload_dir: None
  secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
  forwarded_allow_ips: ['127.0.0.1']
  accesslog: None
  disable_redirect_access_to_syslog: False
  access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
  errorlog: -
  loglevel: debug
  capture_output: False
  logger_class: gunicorn.glogging.Logger
  logconfig: None
  logconfig_dict: {}
  syslog_addr: udp://localhost:514
  syslog: False
  syslog_prefix: None
  syslog_facility: user
  enable_stdio_inheritance: False
  statsd_host: None
  statsd_prefix: 
  proc_name: None
  default_proc_name: hello
  pythonpath: None
  paste: None
  on_starting: <function OnStarting.on_starting at 0x7f5f8b9dad08>
  on_reload: <function OnReload.on_reload at 0x7f5f8b9dae18>
  when_ready: <function WhenReady.when_ready at 0x7f5f8b9daf28>
  pre_fork: <function Prefork.pre_fork at 0x7f5f8b4ec0d0>
  post_fork: <function Postfork.post_fork at 0x7f5f8b4ec1e0>
  post_worker_init: <function PostWorkerInit.post_worker_init at 0x7f5f8b4ec2f0>
  worker_int: <function WorkerInt.worker_int at 0x7f5f8b4ec400>
  worker_abort: <function WorkerAbort.worker_abort at 0x7f5f8b4ec510>
  pre_exec: <function PreExec.pre_exec at 0x7f5f8b4ec620>
  pre_request: <function PreRequest.pre_request at 0x7f5f8b4ec730>
  post_request: <function PostRequest.post_request at 0x7f5f8b4ec7b8>
  child_exit: <function ChildExit.child_exit at 0x7f5f8b4ec8c8>
  worker_exit: <function WorkerExit.worker_exit at 0x7f5f8b4ec9d8>
  nworkers_changed: <function NumWorkersChanged.nworkers_changed at 0x7f5f8b4ecae8>
  on_exit: <function OnExit.on_exit at 0x7f5f8b4ecbf8>
  proxy_protocol: False
  proxy_allow_ips: ['127.0.0.1']
  keyfile: None
  certfile: None
  ssl_version: 2
  cert_reqs: 0
  ca_certs: None
  suppress_ragged_eofs: True
  do_handshake_on_connect: False
  ciphers: TLSv1
  raw_paste_global_conf: []
[2018-08-10 09:48:40 +0200] [23114] [INFO] Starting gunicorn 19.9.0
[2018-08-10 09:48:40 +0200] [23114] [DEBUG] Arbiter booted
[2018-08-10 09:48:40 +0200] [23114] [INFO] Listening at: http://0.0.0.0:5000 (23114)
[2018-08-10 09:48:40 +0200] [23114] [INFO] Using worker: sync
[2018-08-10 09:48:40 +0200] [23117] [INFO] Booting worker with pid: 23117
[2018-08-10 09:48:40 +0200] [23114] [DEBUG] 1 workers
[2018-08-10 09:48:45 +0200] [23117] [DEBUG] GET /
[2018-08-10 09:48:54 +0200] [23117] [DEBUG] GET /
[2018-08-10 09:49:00 +0200] [23117] [DEBUG] GET /
[2018-08-10 09:49:18 +0200] [23117] [DEBUG] Closing connection. 
[2018-08-10 09:49:18 +0200] [23117] [DEBUG] GET /
[2018-08-10 09:49:23 +0200] [23117] [DEBUG] GET /
[2018-08-10 09:49:37 +0200] [23117] [DEBUG] Closing connection. 
[2018-08-10 09:49:37 +0200] [23117] [DEBUG] GET /
[2018-08-10 09:49:50 +0200] [23117] [DEBUG] Closing connection. 
[2018-08-10 09:51:11 +0200] [23117] [DEBUG] GET /
[2018-08-10 09:51:13 +0200] [23117] [DEBUG] GET /
[2018-08-10 09:51:43 +0200] [23114] [CRITICAL] WORKER TIMEOUT (pid:23117)
[2018-08-10 09:51:43 +0200] [23117] [INFO] Worker exiting (pid: 23117)
[2018-08-10 09:51:44 +0200] [23229] [INFO] Booting worker with pid: 23229

рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреНрд░реЛрдорд┐рдпрдо рдореЗрдВ http://0.0.0.0:5000/ рдорд╛рд░ рд░рд╣рд╛ рдерд╛ред
рдЖрдкрдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рд╡рд╛рддрд╛рд╡рд░рдг рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдкрдлрд╛рдЗрд▓ рдФрд░ рдкрд┐рдкрдлрд╛рдЗрд▓.рд▓реЙрдХ рдХреА рд╕рд╛рдордЧреНрд░реА рдиреАрдЪреЗ рджреА рдЧрдИ рд╣реИред

  • рдкрд┐рдкрдлрд╛рдЗрд▓
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
flask = "*"
gunicorn = "*"

[dev-packages]

[requires]
python_version = "3.6"
  • рдкрд┐рдкрдлрд╛рдЗрд▓.рд▓реЙрдХ
{
    "_meta": {
        "hash": {
            "sha256": "81cb5d5f0b11719d8d9c5ec9cc683fdcf959c652fda256d5552a82d0f459a99c"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.6"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "click": {
            "hashes": [
                "sha256:29f99fc6125fbc931b758dc053b3114e55c77a6e4c6c3a2674a2dc986016381d",
                "sha256:f15516df478d5a56180fbf80e68f206010e6d160fc39fa508b65e035fd75130b"
            ],
            "version": "==6.7"
        },
        "flask": {
            "hashes": [
                "sha256:2271c0070dbcb5275fad4a82e29f23ab92682dc45f9dfbc22c02ba9b9322ce48",
                "sha256:a080b744b7e345ccfcbc77954861cb05b3c63786e93f2b3875e0913d44b43f05"
            ],
            "index": "pypi",
            "version": "==1.0.2"
        },
        "gunicorn": {
            "hashes": [
                "sha256:aa8e0b40b4157b36a5df5e599f45c9c76d6af43845ba3b3b0efe2c70473c2471",
                "sha256:fa2662097c66f920f53f70621c6c58ca4a3c4d3434205e608e121b5b3b71f4f3"
            ],
            "index": "pypi",
            "version": "==19.9.0"
        },
        "itsdangerous": {
            "hashes": [
                "sha256:cbb3fcf8d3e33df861709ecaf89d9e6629cff0a217bc2848f1b41cd30d360519"
            ],
            "version": "==0.24"
        },
        "jinja2": {
            "hashes": [
                "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd",
                "sha256:f84be1bb0040caca4cea721fcbbbbd61f9be9464ca236387158b0feea01914a4"
            ],
            "version": "==2.10"
        },
        "markupsafe": {
            "hashes": [
                "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665"
            ],
            "version": "==1.0"
        },
        "werkzeug": {
            "hashes": [
                "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c",
                "sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b"
            ],
            "version": "==0.14.1"
        }
    },
    "develop": {}
}

рдмрд╕ FYI рдХрд░реЗрдВ, рдореИрдВ рднреА рдЗрд╕ рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдмрд╣реБрдд рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ:

рдиреЛрд╣рдк рдЧрдирд┐рдХреЛрд░реНрди -w 8 --access-logfile=- --bind 127.0.0.1:5000 wsgi &

рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╕ рдПрдХ wsgi.py рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣реИ

from chart_api import application
if __name__ == "__main__":
    application.run()

рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдХреЛрд╢рд┐рд╢/рдкреНрд░рдпреЛрдЧ рдХрд░реВрдВ рдпрд╛ рдпрджрд┐ рд▓реЙрдЧ рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдПрдВ рд╣реИрдВ рддреЛ рдЖрдк рдореБрдЭреЗ рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ GCP VM рдкрд░ рдХреБрдкреНрдкреА рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБред

рджреЗрд░ рд╕реЗ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВ рдЗрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдБ

gunicorn --log-file=/home/ubuntu/log/gunicorn.log рднрд╡рд┐рд╖реНрдпрд╡рдХреНрддрд╛_ рдПрдкреАрдЖрдИ: рдРрдк- рдмреА рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 5000 рдФрд░

рдореИрдВрдиреЗ рдЧреАрд╡реЗрдВрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдирд╛ рдбрд┐рдЬрд╝рд╛рдЗрди рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдкрд░реЛрдХреНрдд рдореВрд▓ рд╕реЗрдЯрд┐рдВрдЧ (рдЬреЛ рднреА рд╡рд┐рдлрд▓ рд░рд╣реА рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдХрд┐ рдХреЛрдИ рдЧреАрд╡реЗрдВрдЯ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)

рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг 3.6
env: aws tensorflow_p36 рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬреНрдб (рдЙрдмрдВрдЯреВ)
nginx рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд╕рд╛рдордиреЗ рдмреИрдард╛ рд╣реИ, рдЬреЛ рдПрдХ рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рдХреЛ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред

рдлреНрд▓рд╛рд╕реНрдХ рд╕рдВрд╕реНрдХрд░рдг 1.0.2
nginx рд╕рдВрд╕реНрдХрд░рдг 1.10.3
рдЧрдирд┐рдХреЛрд░реНрди рд╕рдВрд╕реНрдХрд░рдг 19.9.0

рдореИрдВрдиреЗ nginx рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рднреА рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЧрдирд┐рдХреЛрд░реНрди рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ

# рдЧрдирд┐рдХреЛрд░реНрди рдПрдкреНрд▓рд┐рдХреЗрдЯ рдЖрдпрдирд╕рд░реНрд╡рд░: рдРрдк -рдмреА 0.0.0.0:6001 -рдбрдмреНрд▓реНрдпреВ 8 --рдереНрд░реЗрдбреНрд╕ 4 --рдмреИрдХрд▓реЙрдЧ 2048 \
# --рдЯрд╛рдЗрдордЖрдЙрдЯ 120 --рдЧреНрд░реЗрд╕рдлреБрд▓-рдЯрд╛рдЗрдордЖрдЙрдЯ 60 --рдПрдХреНрд╕реЗрд╕-рд▓реЙрдЧрдлрд╛рдЗрд▓ рд▓реЙрдЧреНрд╕/рдПрдХреНрд╕реЗрд╕.рд▓реЙрдЧ \

--error-logfile logs/error.log --log-level=info

рдХреБрдкреНрдкреА ==0.12.1
рдЧрдирд┐рдХреЛрд░реНрди==19.7.1

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

рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ? рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ

[рдорд╣рддреНрд╡рдкреВрд░реНрдг] рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд

рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдЗрд╕реЗ рдбреЙрдХрд░ рдЫрд╡рд┐ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рд╣реИ?

рдпрд╣ рднреА рджреЗрдЦрддреЗ рд╣реБрдП рдЬрдм рдПрдХ рдореМрдЬреВрджрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдбреЗрдЯрд╛рдбреЙрдЧ рдХреЗ рдбреАрдбреАрдЯреНрд░реЗрд╕-рд░рди рд╡рд░реНрдХрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЧрдирд┐рдХреЛрд░реНрди -рдХреЗ рдЧреАрд╡реЗрдВрдЯ --рдереНрд░реЗрдбреНрд╕ 4 рд╕реЗ рд╢реБрд░реВ рд╣реЛ рд░рд╣рд╛ рд╣реИред

SystemExit рдХрд╛ рдордЬрд╝реЗрджрд╛рд░ рдирд┐рд╢рд╛рди рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрднреА рдирд╣реАрдВ рджреЗрдЦрд╛ ...
[2018-11-07 11:11:50 +0000] [15987] [INFO] Booting worker with pid: 15987 [2018-11-07 11:11:50 +0000] [15977] [DEBUG] 1 workers [2018-11-07 11:12:20 +0000] [15977] [CRITICAL] WORKER TIMEOUT (pid:15987) Exception SystemExit: 1 in <bound method LibevLoop._loop_will_run of <cassandra.io.libevreactor.LibevLoop object at 0x7f3cb66d4a50>> ignored

рдореИрдВ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдзрд╛рдЧреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдорд┐рд▓рд╛рди рдХрд░рдХреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

рдореИрдВрдиреЗ workers = (2 * cpu_count) + 1 рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдереНрд░реЗрдб рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред

рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ threads = workers рдмрджрд▓ рджрд┐рдпрд╛, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрд╛ред рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЕрдм рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

def run(host='0.0.0.0', port=8080, workers=1 + (multiprocessing.cpu_count() * 2)):
    """Run the app with Gunicorn."""

    if app.debug:
        app.run(host, int(port), use_reloader=False)
    else:
        gunicorn = WSGIApplication()
        gunicorn.load_wsgiapp = lambda: app
        gunicorn.cfg.set('bind', '%s:%s' % (host, port))
        gunicorn.cfg.set('workers', workers)
        gunicorn.cfg.set('threads', workers)
        gunicorn.cfg.set('pidfile', None)
        gunicorn.cfg.set('worker_class', 'sync')
        gunicorn.cfg.set('keepalive', 10)
        gunicorn.cfg.set('accesslog', '-')
        gunicorn.cfg.set('errorlog', '-')
        gunicorn.cfg.set('reload', True)
        gunicorn.chdir()
        gunicorn.run()

рдореБрдЭреЗ рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рд▓реЛрдЪрджрд╛рд░ рдмреАрдирд╕реНрдЯреЙрдХ рдкрд░ рдПрдХ рдПрдХрд▓ рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде Django рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореИрдВрдиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореВрд╣реЛрдВ рдХреЛ рдареАрдХ рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдХрд┐ рдореЗрд░рд╛ EC2 рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ RDS рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдмрд╛рдд рдХрд░ рд╕рдХреЗред рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ 99% рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдиреЛрдЯ рдХреЛ рджреВрд╕рд░реЛрдВ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЗрд╕ рдЦрд░рдЧреЛрд╢ рдХреЗ рдЫреЗрдж рдореЗрдВ рдЧрд┐рд░рдиреЗ рд╕реЗ рдШрдВрдЯреЛрдВ рдмрд░реНрдмрд╛рдж рди рд╣реЛред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ systemctl daemon-reload рдкреНрд░рджрд░реНрд╢рди рдХрд░рдХреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд▓рдВрдмреА рдХрд╣рд╛рдиреА рдЫреЛрдЯреА рдореИрдВ 30sec рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рддрдм рддрдХ рдмрджрд▓рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдерд╛ рдЬрдм рддрдХ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореБрдЭреЗ рд╕реЗрд╡рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд╕реНрдЯрдордб рдбреЗрдореЙрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

@bigunyak @benoitc @tilgovi
рдПрдХ рд▓рдВрдмреЗ Google рд╣рдВрд╕ рдкреАрдЫрд╛ рдФрд░ рдХреБрдЫ рдкреНрд░рдпреЛрдЧ рдХреЗ рдмрд╛рдж рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдореВрд▓ рдХрд╛рд░рдг рдХреНрд░реЛрдо "рдкреНрд░реАрдХрдиреЗрдХреНрдЯ/рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕реЗрд╡рд╛" рд╣реИ (рдЬреЛ рдХреНрд░реЛрдо рдФрд░ рдХреНрд░реЛрдорд┐рдпрдо рджреЛрдиреЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реИ)ред

@рдЬреАрддрд┐рдВрдЧ рдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдЕрдЪреНрдЫрд╛ рд▓рд┐рдЦрд╛
https://hackernoon.com/chrome-preconnect-breaks-singly-threaded-servers-95944be16400
рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрдврд╝рдирд╛:
https://github.com/corydorf/flask-cors/issues/147
https://github.com/pallets/flask/issues/2169

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

рдореЗрд░рд╛ рдкрд░реНрдпрд╛рд╡рд░рдг

  • рдореЗрд░рд╛ рдореВрд▓ рдУрдПрд╕ рдЙрдмрдВрдЯреВ 17 рд╣реИ
  • рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рдмрд╛рдХреА рдПрдкреАрдЖрдИ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдбреЙрдХрдлрд╛рдЗрд▓ рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдкрдВрдХреНрддрд┐рдпрд╛рдБ
FROM ubuntu:18.04
...
RUN pip3 install Flask==1.0.2
RUN pip3 install gunicorn==19.9.0
RUN pip3 install flask-cors==3.0.6
......
  • рдореЗрд░реЗ рдкрд╛рд╕ 3 рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВ: рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 61.0.1, рдХреНрд░реЛрдорд┐рдпрдо 67.0.0.3396.99, рдХреНрд░реЛрдо 70.0.0.3538.102
  • рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдРрдк рд╣реИ рдЬреЛ рдПрдХ рдЕрд▓рдЧ рдкреЛрд░реНрдЯ рдкрд░ рдПрдХ рдЕрд▓рдЧ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИ
  • рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдРрдк рдореЗрд░реЗ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд╕реАрдУрдЖрд░рдПрд╕ AJAX рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ (рд╡реЗ рд╕реАрдУрдЖрд░рдПрд╕ рдЕрдиреБрд░реЛрдз рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдкреЛрд░реНрдЯ рдкрд░ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдЗрд╕рдХреА рдПрдкреАрдЖрдИ рдХреЙрд▓ рджреВрд╕рд░реЗ рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдкреЛрд░реНрдЯ рдкрд░ рднреЗрдЬрддреА рд╣реИ)
  • рдЕрдиреБрд░реЛрдз рдЬреЛ рдореЗрд░реЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╣рдореЗрд╢рд╛ "рдЕрд╡рд░реБрджреНрдз" рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ рдПрдХ CORS рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз рд╣реИ (рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ POST рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдХрд▓реНрдк рдХреЙрд▓ рдХреЗ рд╕рд╛рде рднрд╡рд┐рд╖реНрдп рдХрд╣рдиреЗрд╡рд╛рд▓рд╛ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ POST рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдЕрдиреБрд╡рд░реНрддреА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рдкреНрд░рдпреЛрдЧ 1
Gunicorn рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди: 1 рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 30s рдЯрд╛рдЗрдордЖрдЙрдЯ)

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕: рд▓рдЧрднрдЧ рд╣рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреГрд╖реНрда рд▓реЛрдб рдкрд░, CORS рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз 5s рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред
рдХреНрд░реЛрдорд┐рдпрдо: рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреГрд╖реНрда рд▓реЛрдб рд╣реЛрдиреЗ рдкрд░, CORS рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз 1.5 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ !!!! рдФрд░ рдлрд┐рд░ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред
рдХреНрд░реЛрдорд┐рдпрдо (рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕реЗрд╡рд╛ рдЕрдХреНрд╖рдо): рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ
рдХреНрд░реЛрдо: рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ

рдкреНрд░рдпреЛрдЧ 2
Gunicorn рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди: 4 рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 30s рдЯрд╛рдЗрдордЖрдЙрдЯ)

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕: рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ
рдХреНрд░реЛрдорд┐рдпрдо: рдкреНрд░рддреНрдпреЗрдХ рддреАрд╕рд░реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреГрд╖реНрда рд▓реЛрдб рдкрд░, CORS рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз 30 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред
рдХреНрд░реЛрдорд┐рдпрдо (рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕реЗрд╡рд╛ рдЕрдХреНрд╖рдо): рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ
рдХреНрд░реЛрдо: рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ

рдкреНрд░рдпреЛрдЧ 3
Gunicorn рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди: 8 рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ 30s рдЯрд╛рдЗрдордЖрдЙрдЯ)

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕: рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ
рдХреНрд░реЛрдорд┐рдпрдо: рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ
рдХреНрд░реЛрдо: рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ

рдкреНрд░рдпреЛрдЧ 4
threaded=True рд╕рд╛рде рдлреНрд▓рд╛рд╕реНрдХ рджреЗрд╡ рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдПрдБ

рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕: рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ
рдХреНрд░реЛрдорд┐рдпрдо: рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ
рдХреНрд░реЛрдо: рд╕рдм рдХреБрдЫ рдареАрдХ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИ

рдкреНрд░рдпреЛрдЧ рд╕рд╛рд░рд╛рдВрд╢

  • рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рднреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕реЗрд╡рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд▓рдЧрддрд╛ рд╣реИред (рдкреНрд░рдпреЛрдЧ 1)
  • "рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди" рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдХреНрд░реЛрдорд┐рдпрдо рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЖрдХреНрд░рд╛рдордХ рд▓рдЧрддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз (рдкреНрд░рдпреЛрдЧ 1 рдФрд░ 2) рдХреЗ рджреМрд░рд╛рди 3-4 "рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди" рдХрдиреЗрдХреНрд╢рди рд▓реЙрдиреНрдЪ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
  • рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рднрд▓реЗ рд╣реА рдХреНрд░реЛрдо рдореЗрдВ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рд╕реЗрд╡рд╛ рд╕рдХреНрд╖рдо рд╣реЛ, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдХрд┐рд╕реА рднреА рдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдкреИрджрд╛ рдХреА (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрд░рдо рдпрд╛ "рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди" рдХрдиреЗрдХреНрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреНрд░реЛрдорд┐рдпрдо рд╕реЗ рдЕрд▓рдЧ рд╣реЛ)

рд╕рдорд╛рдзрд╛рди
рдЙрддреНрдкрд╛рджрди рдореЗрдВ: рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдлрд┐рдХреНрд╕ рдирдЧрдиреЗрдХреНрд╕ рдХреЛ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд╕рд╛рдордиреЗ рд░рдЦрдирд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ nginx рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХреНрдпреЛрдВ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕рдордЭрд╛рддрд╛ рд╣реИ: https://www.brianstorti.com/the-role-of-a-reverse-proxy-to-protect-your-application-against -рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЧреНрд░рд╛рд╣рдХ/

рджреЗрд╡ рдореЗрдВ: рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рдлрд┐рдХреНрд╕ threaded=True рд╕рд╛рде рдлреНрд▓рд╛рд╕реНрдХ рджреЗрд╡ рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдирд╛ рд╣реИред рдпрд╛ рдЖрдк рдХреНрд░реЛрдо/рдХреНрд░реЛрдорд┐рдпрдо рдореЗрдВ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╕реЗрд╡рд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЧрдирд┐рдХреЛрд░реНрди рдбрд┐рдмрдЧ рд╕реБрдзрд╛рд░
рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдореЗрдВ select() рдФрд░ accept() рдХреЙрд▓ рдХреЗ рдЖрдЧреЗ рдбреАрдмрдЧ рд▓реЙрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред
https://github.com/benoitc/gunicorn/blob/e974f30517261b2bc95cfb2017a8688f367c8bf3/gunicorn/workers/sync.py#L26
https://github.com/benoitc/gunicorn/blob/e974f30517261b2bc95cfb2017a8688f367c8bf3/gunicorn/workers/sync.py#L34
рдпрд╣ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдиреЗ рдПрдХ рдирдпрд╛ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

@asnisarenko рд╕реБрдкрд░ рд░рд╛рдЗрдЯ-рдЕрдк, рдзрдиреНрдпрд╡рд╛рджред #1929 рд╕реНрд▓реЛ-рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдПрдХ рдФрд░ рдЕрд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕рдорд╛рди рд▓рдХреНрд╖рдг рджреЗрддрд╛ рд╣реИ - рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЧреИрд░-рдЯреАрдПрд▓рдПрд╕ рдкреЛрд░реНрдЯ рдкрд░ рдЯреАрдПрд▓рдПрд╕ рд╣реИрдВрдбрд╢реЗрдХ рдзреАрдореЗ-рдзреАрдореЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдордЭрджрд╛рд░ рд╣реЗрдбрд░ рдХреЛ рдЬрд▓реНрджреА рднреЗрдЬрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред .

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

рдпрджрд┐ рдЖрдкрдХреЗ рдРрдк рдореЗрдВ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХреБрдЫ рдЕрд╕реНрдерд╛рдпреА рдирд┐рджрд╛рди рдХреЛрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

def trace_on_abort():
    import signal
    import traceback

    def print_trace(sig, frame):
        print(''.join(traceback.format_stack(frame)))

    signal.signal(signal.SIGABRT, print_trace)

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдкрддрд╛ рдЪрд▓реЗрдЧрд╛ рдХрд┐ рдЖрдкрдХрд╛ рдРрдк рдХрд╣рд╛рдВ рд╣реИрдВрдЧ рд╣реЛрддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдХрд┐рд╕реА рддрд░рд╣ import flask рд╕реЗ рдкрд╣рд▓реЗ gevent.monkey.patch_all() рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдлреНрд▓рд╛рд╕реНрдХ рдХрд╛ app._before_request_lock рдПрдХ рдЧреИрд░-рдЬреЗрд╡реЗрдВрдЯ рд▓реЙрдХ рдмрди рдЧрдпрд╛ (рдпрд╛рдиреА рд╕рд╛рджрд╛ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд threading.Lock )ред рдРрд╕реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрдк рд╕реНрдЯрд╛рд░реНрдЯ-рдЕрдк рдкрд░ рд▓рдЧрд╛рддрд╛рд░ рджреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рд╣реИрдВрдЧ рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдкреВрд░реЗ рдереНрд░реЗрдб рдХреЛ рд▓реЙрдХ рдХрд░ рджреЗрдЧрд╛)ред рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реА рдмрдЧ рдереА, рдФрд░ рдЖрдкрдХреА рдмрдЧ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИред

@asnisarenko рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╣реИрдВрдЧ рдХрд╛ рдЕрдиреБрднрд╡ рдХреНрдпреЛрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ _not_ рдкреНрд░рддрд┐ рдХрдиреЗрдХреНрд╢рди рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╣рдЬрд╛рд░реЛрдВ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХреЛ рд╕рд╣рдХрд╛рд░реА рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛрдб рд╕реАрдкреАрдпреВ рдкрд░ рдПрдХрд╛рдзрд┐рдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ/рдкреВрд░реЗ рдзрд╛рдЧреЗ рдХреЛ рд▓реЙрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрджрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдиреБрд░реЛрдз рдХреЛ рд░реЛрдХ рджреЗрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рд╕реАрдзрд╛ рд╕рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рдЧрдиреАрдХреЙрд░реНрди read() рд╕реЙрдХреЗрдЯ рд╕реЗ рдЖрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЧреНрд░реАрдирд▓реЗрдЯ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ read рдмрдВрджрд░-рдкреИрдЪ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рдЕрдиреНрдп рдЧреНрд░реАрдирд▓реЗрдЯреНрд╕ред

@ikonst
рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рдЪрд▓рд╛рдиреЗ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реА рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╡рд░реНрдЧ sync http://docs.gunicorn.org/en/stable/settings.html#worker -class рд╣реИ

sync рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░реА-рдлреЛрд░реНрдХ рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди/рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд╛рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ sync рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рд╕реЗ eventlet рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ:

CMD pipenv run gunicorn webapp -b 0.0.0.0:8080 -k eventlet

рдЖрдкрдХреЛ рдХрд╛рдордпрд╛рдмреА рдорд┐рд▓реЗред

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдореЗрд░реА рдорджрдж рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдореЗрд░реА рддрд░рдл рд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдореБрдЭреЗ 7 рдШрдВрдЯреЗ рд▓рдЧреЗ (рдИрд╕реА 2 рдкрд░ рдбреЙрдХрд░ рдореЗрдВ рдПрдХ рдлреНрд▓рд╛рд╕реНрдХ/рдЧрдирд┐рдХреЛрд░реНрди рдРрдк рдЪрд▓ рд░рд╣рд╛ рд╣реИ), рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рд╕рд┐рд░рджрд░реНрдж рдХреЛ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЬреАрдд рд╣реИред

рдХрдВрдЯреЗрдирд░ рд╕реНрдореГрддрд┐ рд╕реАрдорд╛ рдЬреЛ рдмрд╣реБрдд рдХрдо рдереАред

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

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

def trace_on_abort():
    import signal
    import traceback

    def print_trace(sig, frame):
        print(''.join(traceback.format_stack(frame)))

    signal.signal(signal.SIGABRT, print_trace)

рдЖрдк рдореЗрд░реА рдмрд╣реБрдд рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдИрдПрдЪрдпреВ)))

рдпрд╣ trace_on_abort() рд╡рд┐рдзрд┐ рдХрд╣рд╛рдБ рдЬрд╛рддреА рд╣реИ? рдРрдк рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдореЗрдВ? рдХреНрдпрд╛ рдЗрд╕реЗ рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

@ mattg-vbt рдЗрд╕реЗ рдЕрдкрдиреЗ рдРрдк рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬрдм рдЖрдкрдХреЛ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВ

@ikonst рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рдРрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ рд╣рд┐рдЯ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдзрд┐ рд╣рд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

@ mattg-vbt рдХреНрдпрд╛ рдЖрдк kill -ABRT $pid рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ print_trace рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ? (рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ Werkzeug рд╕реЗ SIGABRT рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдЗрдП рдкрд╣рд▓реЗ рдЬрд╛рдВрдЪ рд▓реЗрдВ рдХрд┐ рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)

рд╣рдорд╛рд░реЗ рдмреАрдЪ рдХрдо рдЬрд╛рдирдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП

web gunicorn app:app -k gevent --worker-connections 1000 ?

@SumNeuron
рдпрджрд┐ рдЖрдк gevent рд╡рд░реНрдХрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░реНрд╕ рдХреЗ рдмрдЬрд╛рдп) рддреЛ рдЖрдкрдХреЛ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЖрджреЗрд╢ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреЗрд╡рд▓ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкрд░ gevent рд╡рд░реНрдХрд░реНрд╕ рдХреЗ рд╕рд╛рде рдорд┐рд▓ рд░рд╣реА рд╣реИ, рдЬреЛ рдереЛрдбрд╝рд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЕрдкрдирд╛ рдРрдк рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд╛рдИ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдЯ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдПрдХ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкрд░реАрдХреНрд╖рдг рд░реЗрдкреЛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИ: https://github.com/zamponotiropita/test-gunicorn-worker-timeout -> test_0 рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, test_1 рдФрд░ test_2 рдкрд╛рд╕

@zamponotiropita рдХреНрдпрд╛ рдЖрдк

@ikonst рдХреГрдкрдпрд╛ рд░рди рдлрд╝рд╛рдЗрд▓ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ run.sh , рдпрд╣ рдкреНрд░рддрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЖрдИ рдереА, рд▓реЗрдХрд┐рди рдкреНрд░реАрд▓реЛрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдРрдк рдСрдмреНрдЬреЗрдХреНрдЯ (рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде) рдХреЙрдкреА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлреЛрд░реНрдХрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджреЗрддрд╛ рд╣реИ -> рдореЗрд░рд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрд╛ рдорд╛рд╕реНрдЯрд░ рдФрд░ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рдорд╛рди рдХрдиреЗрдХреНрд╢рди, рдФрд░ рдореБрдЭреЗ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛

рдореЗрд░реА рднреА рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдореИрдВ рдлреНрд▓рд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреЗрдЯрд╛ рдСрди-рдж-рдлреНрд▓рд╛рдИ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдпрд╣ рд╡рд┐рдзрд┐, рдФрд░ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ --timeout рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЙрд╕рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рдЙрджрд╛рд╣рд░рдг:

test_gunicorn_timeout.py

import flask
from time import sleep


app = flask.Flask(__name__)


@app.route('/')
def gunicorn_timeout():
    def generator():
        for _ in range(10):
            yield b'Yet another line...'
            sleep(2)
    return flask.Response(generator(), mimetype='text/plain')

рдлрд┐рд░ gunicorn --timeout 10 test_gunicorn_timeout:app рдЪрд▓рд╛рдПрдВ рдФрд░ 10 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж localhost:8000 рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░ рдЖрдкрдХреЛ a
[CRITICAL] WORKER TIMEOUT ред

рдореИрдВрдиреЗ -k gevent рдФрд░ -k eventlet рд╕рд╛рде рдЪрд▓рдиреЗ рдХреА рднреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ред

рдореИрдВ рд╡рд┐рдВрдбреЛрдЬ 10 рдкреНрд░реЛ рдкрд░ рд╣реВрдВред рдбреЙрдХрд░ рдХрдВрдкреЛрдЬрд╝ рдХреЗ рд╕рд╛рде
gunicorn app -b 0.0.0.0:8000 -k gevent
рдореЗрд░реЗ рдЕрдЬрдЧрд░ рдХрдВрдЯреЗрдирд░ рдореЗрдВ gevent рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛
рдЧреАрд╡реЗрдВрдЯ рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдлрд┐рд░ gunicorn --timeout 10 test_gunicorn_timeout:app рдЪрд▓рд╛рдПрдВ рдФрд░ 10 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж localhost:8000 рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдкрд░ рдЖрдкрдХреЛ a
[CRITICAL] WORKER TIMEOUT ред

рдореИрдВрдиреЗ -k gevent рдФрд░ -k eventlet рд╕рд╛рде рдЪрд▓рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ред

@ltskv

рдХреНрдпрд╛ рдЖрдкрдХреЛ [рдХреНрд░рд┐рдЯрд┐рдХрд▓] рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ?

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

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореЗрд░реЗ рд▓рд┐рдП рдЧрдирд┐рдХреЛрд░реНрди рдкреНрд░рд▓реЗрдЦрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред --timeout рдХреЗ рд▓рд┐рдП рдпрд╣ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ Workers silent for more than this many seconds are killed and restarted. рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ 30sec рдХреЗ рдмрд╛рдж рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╡реЗ рдЕрднреА рднреА рдбреЗрдЯрд╛ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ?

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

@ рдХрд░реНрдЯ-рд╣реЗрдХреНрдЯрд┐рдХ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореМрди рд╕реЗ рд╣рдорд╛рд░рд╛ рддрд╛рддреНрдкрд░реНрдп рдордзреНрдпрд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдореМрди рд╕реЗ рд╣реИ, рдЬреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ, рддреЛ рд╡рд╣ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдордзреНрдпрд╕реНрде рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдпрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реИред

#1974 рднреА рджреЗрдЦреЗрдВред

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

@ рдХрд░реНрдЯ-рд╣реЗрдХреНрдЯрд┐рдХ рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ -k gevent рд╡рд┐рдХрд▓реНрдк рдХреА рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХреА рдФрд░ рдЬреЗрдирд░реЗрдЯрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ sleep(0) рдбрд╛рд▓рд╛ рдФрд░ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рдерд╛ (рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЙрд╕ рд╕рдордп рдХреНрдпреЛрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ рдореИрдВрдиреЗ рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рд╡рд╛рд▓ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛)ред

--рдЯрд╛рдЗрдордЖрдЙрдЯ=5

рдпрд╣ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЖрдо рдХрд╛рд░рдг рд╣реИред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдЖрдкрдХреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдХреБрдЫ рджрд┐рдиреЛрдВ рдкрд╣рд▓реЗ рдЗрд╕ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдорд┐рд▓рд╛ рдФрд░ рдХреБрдЫ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред рдпрд╣ рдЕрдм рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдореЗрд░реА рд╕рдордЭ рдФрд░ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:

  1. рдЧрдирд┐рдХреЛрд░реНрди рдореЗрдВ рдкреНрд░реАрд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

рдпрд╣ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдмреВрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреИрдХреЗрдЬ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдмреИрдХрдПрдВрдб, рд╕реЗрд╡рд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк рдзреАрдореЗ рдРрдк рдмреВрдЯ рд╕рдордп рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рддреЛ рдЧрдирд┐рдХреЛрд░реНрди рдореЗрдВ рдкреНрд░реАрд▓реЛрдб рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ (рджреЗрдЦреЗрдВ https://devcenter.heroku.com/articles/python-gunicorn#advanced-configuration)ред

рдЧрдирд┐рдХреЛрд░реНрди рд╣реИрд▓реЛ: рдРрдк --preload

  1. рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд▓рд┐рдП рд╕рдордпрдмрд╛рд╣реНрдп рдмрдврд╝рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ 30s рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп рдЪрд╛рд╣рд┐рдП, рддреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдмрдврд╝рд╛рдПрдВред

рдЧрдирд┐рдХреЛрд░реНрди рд╣реИрд▓реЛ: рдРрдк --рдЯрд╛рдЗрдордЖрдЙрдЯ 10

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдХрд┐рд╕реА рдПрдкреАрдЖрдИ рдХреЛ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдореЗрдВ 1 рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдкреНрд░рдЧрддрд┐ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

  1. рдпрджрд┐ рдЖрдк k8s рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк yaml рдореЗрдВ рдХрдВрдЯреЗрдирд░/рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯрд╕реЗрдХрдВрдб рднреА рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдЖрдЬ рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЛ рдбреЗрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рд▓реМрдЯрдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ рдПрдХ рдорд┐рдирдЯ рдХрд╛ рд╕рдордп рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреНрд░рд┐рдЯрд┐рдХрд▓ рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реБрдИрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рдорд┐рдирдЯ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ рдзреНрд╡рдЬ рдмрдврд╝рд╛рдХрд░ рд╣рд▓ рдХрд┐рдпрд╛ - рдпрд╣ рдХрд╛рдо рдХрд┐рдпрд╛, рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рджреЗрдЦрд╛ред рдЙрдореНрдореАрдж рд╣реИ рдХреА рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛ред рдореИрдВ uvicorn.workers.UvicornWorker рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореИрдВрдиреЗ gnuicorn рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛:

web: gunicorn --workers=3 BlocAPI:app --log-file -

рдкрддрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВред

рд╢рд╛рдпрдж рдЖрдкрдХреЗ рдкрд╛рд╕ рдЧрддрд┐рд░реЛрдз рдерд╛? рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдРрдк рдЦреБрдж рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ?

рд╕реВрд░реНрдп рдкрд░, 5 рдЬрдирд╡рд░реА 2020, 10:52 рдЕрд▓реНрдкрд╛рдЗрдирдЪрд┐рдХрди, рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореИрдВрдиреЗ gnuicorn рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛:

рд╡реЗрдм: рдЧрдирд┐рдХреЛрд░реНрди --рд╡рд░реНрдХрд░реНрд╕ = 3 рдмреНрд▓реЙрдХрдПрдкреАрдЖрдИ: рдРрдк --рд▓реЙрдЧ -рдлрд╛рдЗрд▓ -

рдкрддрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/1801?email_source=notifications&email_token=AAAEQJVQRCW3C63EZJWIN5DQ4G3WTA5CNFSM4FDLD5PKYY3PNVWWK3TUL52HS4DFVREXG43DVTVH
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAAEQJXZM4NLK56DZMFSZALQ4G3WTANCNFSM4FDLD5PA
.

рд╣рд╛рдБ рдПрдХ рдорд╛рд░реНрдЧ рджреВрд╕рд░реЗ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╡рд╣ рдмреБрд░рд╛ рд╣реИ?

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЕрдиреНрдпрдерд╛ рдЖрдкрдХрд╛ рд╕рд░реНрд╡рд░ рд╣реЛрдЧрд╛
рдЧрддрд┐рд░реЛрдз рдЕрдиреБрд░реЛрдз рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рд╕рд░реНрд╡рд░ рджреВрд╕рд░реЗ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛
рдЕрдиреБрд░реЛрдз (рдЬреЛ рдХрддрд╛рд░рдмрджреНрдз рд╣реЛрдЧрд╛)ред

рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдз рдорд┐рд▓рддрд╛ рд╣реИред

рд╕реЛрдо, 6 рдЬрдирд╡рд░реА 2020, 2:45 alpinechicken рдкрд░, [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рд╣рд╛рдБ рдПрдХ рдорд╛рд░реНрдЧ рджреВрд╕рд░реЗ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╡рд╣ рдмреБрд░рд╛ рд╣реИ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/1801?email_source=notifications&email_token=AAAEQJSFEFBBI6AMZJCM4C3Q4KLOJA5CNFSM4FDLD5PKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW#PI
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAAEQJXTCPOFIZJU5PUPOODQ4KLOJANCNFSM4FDLD5PA
.

рдЖрд╣ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдордВрдЧрд▓, 7 рдЬрдирд╡рд░реА, 2020 6:23 рдкреВрд░реНрд╡рд╛рд╣реНрди bobf рдкрд░ рдкрд░ [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЕрдиреНрдпрдерд╛ рдЖрдкрдХрд╛ рд╕рд░реНрд╡рд░ рд╣реЛрдЧрд╛
рдЧрддрд┐рд░реЛрдз рдЕрдиреБрд░реЛрдз рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рд╕рд░реНрд╡рд░ рджреВрд╕рд░реЗ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛
рдЕрдиреБрд░реЛрдз (рдЬреЛ рдХрддрд╛рд░рдмрджреНрдз рд╣реЛрдЧрд╛)ред

рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдз рдорд┐рд▓рддрд╛ рд╣реИред

рд╕реЛрдо, 6 рдЬрдирд╡рд░реА 2020, 2:45 alpinechicken рдкрд░, [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рд╣рд╛рдБ рдПрдХ рдорд╛рд░реНрдЧ рджреВрд╕рд░реЗ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╡рд╣ рдмреБрд░рд╛ рд╣реИ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
<
https://github.com/benoitc/gunicorn/issues/1801?email_source=notifications&email_token=AAAEQJSFEFBBI6AMZJCM4C3Q4KLOJA5CNFSM4FDLD5PKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63PI
,
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
<
https://github.com/notifications/unsubscribe-auth/AAAEQJXTCPOFIZJU5PUPOODQ4KLOJANCNFSM4FDLD5PA

.

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/1801?email_source=notifications&email_token=AAH2WRPVPVO2EJ53BKQW5B3Q4OHLRA5CNFSM4FDLD5PKYY3PNVWWK3TUL52HS4DFVREXG43VMVB7JQTGODNMVX
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAH2WRM2LLIB4O6OHCU5UG3Q4OHLRANCNFSM4FDLD5PA
.

рд╡рд░реНрдХрд░_рдХреНрд▓рд╛рд╕', 'рд╕рд┐рдВрдХ')

рдореИрдВ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдзрд╛рдЧреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдорд┐рд▓рд╛рди рдХрд░рдХреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред

рдореИрдВрдиреЗ workers = (2 * cpu_count) + 1 рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдереНрд░реЗрдб рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред

рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ threads = workers рдмрджрд▓ рджрд┐рдпрд╛, рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрд╛ред рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдЧрд░ рдпрд╣ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рдЕрдм рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ

def run(host='0.0.0.0', port=8080, workers=1 + (multiprocessing.cpu_count() * 2)):
    """Run the app with Gunicorn."""

    if app.debug:
        app.run(host, int(port), use_reloader=False)
    else:
        gunicorn = WSGIApplication()
        gunicorn.load_wsgiapp = lambda: app
        gunicorn.cfg.set('bind', '%s:%s' % (host, port))
        gunicorn.cfg.set('workers', workers)
        gunicorn.cfg.set('threads', workers)
        gunicorn.cfg.set('pidfile', None)
        gunicorn.cfg.set('worker_class', 'sync')
        gunicorn.cfg.set('keepalive', 10)
        gunicorn.cfg.set('accesslog', '-')
        gunicorn.cfg.set('errorlog', '-')
        gunicorn.cfg.set('reload', True)
        gunicorn.chdir()
        gunicorn.run()

Gunicorn doc рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрджрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдереНрд░реЗрдбреНрд╕ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд░реНрдХрд░ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕рд┐рдВрдХ рд╕реЗ gthread рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
рдкреБрдирд╢реНрдЪ:-
рдпрджрд┐ рдЖрдк рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдереНрд░реЗрдбреНрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ 1 рд╕реЗ рдЕрдзрд┐рдХ рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп gthread рд╡рд░реНрдХрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореЗрд░рд╛ рдорд╛рдорд▓рд╛:

рдкрд░реНрдпрд╛рд╡рд░рдг: Ubuntu18.04+ gunicorn+ nginx +flask

рдореЗрд░реЗ рдЖрднрд╛рд╕реА рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ pip install gunicorn[gevent]

gunicorn -b localhost:8000 -w 4 web:app рдХреЛ gunicorn -b localhost:8000 -k gevent web:app рдмрджрд▓реЗрдВ

рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИрдВред

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

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

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

рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рд╕рд╛рдордиреЗ рдмрд┐рдирд╛ рдмрдлрд░рд┐рдВрдЧ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ Gunicorn рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ, рд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдордЖрдЙрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдо рд╣реИрдВ:

  • рдзреАрдореЗ рдЧреНрд░рд╛рд╣рдХ
  • рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдкреНрд░реЙрдХреНрд╕реА рджреНрд╡рд╛рд░рд╛ рдЦреБрд▓реЗ рдЫреЛрдбрд╝реЗ рдЧрдП рдХрдиреЗрдХреНрд╢рди рдХреЛ рдкреНрд░реА-рдХрдиреЗрдХреНрдЯ / рдкреНрд░реАрдлрд╝реЗрдЪ рдХрд░реЗрдВ
  • рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдпрд╛ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реАрдкреАрдпреВ-рдмрд╛рдзреНрдп рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг рд▓рдВрдмреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ

рдЖрдк рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдпрд╛ рдереНрд░реЗрдбреЗрдб рд╡рд░реНрдХрд░ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдЖрдк рдЧрдирд┐рдХреЛрд░реНрди рдХреЛ рдмрдлрд░рд┐рдВрдЧ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдкреАрдЫреЗ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рд╕рдордпрдмрд╛рд╣реНрдп рдЖрдкрдХреЗ рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдХрд╛рд░рдг рдмрд╛рд╣рд░реА рдПрдкреАрдЖрдИ рдХреЛ рдзреАрдореА рдХреЙрд▓ рдХрд░рдиреЗ рдпрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рд╡рдЬрд╣ рд╕реЗ рд╣реИрдВ, рддреЛ рдЖрдк --timeout рд╡рд┐рдХрд▓реНрдк рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо рджреЛ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЕрдиреНрдпрдерд╛ рдЖрдкрдХрд╛ рд╕рд░реНрд╡рд░ рдЧрддрд┐рд░реЛрдз рдХрд░реЗрдЧрд╛ред рдЕрдиреБрд░реЛрдз рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рд╕рд░реНрд╡рд░ рджреВрд╕рд░реЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрддрд╛ (рдЬреЛ рдХрддрд╛рд░рдмрджреНрдз рд╣реЛрдЧрд╛)ред рдЖрдкрдХреЛ рдкреНрд░рддрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдз рдорд┐рд▓рддрд╛ рд╣реИред
тАж
рд╕реЛрдо, 6 рдЬрдирд╡рд░реА 2020, 02:45 рдЕрд▓реНрдкрд╛рдЗрдирдЪрд┐рдХрди, @ рдкрд░ ред * > рд▓рд┐рдЦрд╛: рд╣рд╛рдБ рдПрдХ рд░рд╛рд╕реНрддрд╛ рджреВрд╕рд░реЗ рдХреЛ рдмреБрд▓рд╛рддрд╛ рд╣реИ - рдХреНрдпрд╛ рд╡рд╣ рдмреБрд░рд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм 'рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд░реВрдЯ рдХреЗ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм 'рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд░реВрдЯ рдХреЗ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

рдирд╣реАрдВред рдПрдХ рдлреНрд▓рд╛рд╕реНрдХ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдПрдХ HTTP рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рддрдм рдПрдХ рдирдпрд╛ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рддреЛ рдПрдХ рдФрд░ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрдм рднреА рдХреЛрдИ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рддреИрдпрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдпрд╣ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред

рдореИрдВрдиреЗ gnuicorn рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдареАрдХ рдХрд┐рдпрд╛:

web: gunicorn --workers=3 BlocAPI:app --log-file -

рдкрддрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВред

рдХреНрдпрд╛ рдпрд╣ рдкрд╣рд▓реЗ @anilpai рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдЬрд╣рд╛рдВ рдЙрдиреНрд╣реЛрдВрдиреЗ workers=1 + (multiprocessing.cpu_count() * 2) .. рд╕реЗрдЯ рдХрд┐рдпрд╛ рдерд╛?

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

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореЗрд░реА module/wsgi.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛ рдореИрдВ gunicorn module.wsgi рд╕рд╛рде рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдереА -

application = my_create_app_function()
application.run(host="0.0.0.0")

рдЬрдмрдХрд┐ рдореБрдЭреЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ -

application = my_create_app_function()
if __name__ == "__main__":
     application.run(host="0.0.0.0")

рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рдЖрдк рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп application.run() рдкрд░ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред __name__ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рддрд╣рдд "__main__" рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдлреНрд▓рд╛рд╕реНрдХ рдореЗрдВ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЕрднреА рднреА рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдбреАрдмрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдпрд╣ рдЕрднреА рднреА рд╣реЛ рд░рд╣рд╛ рд╣реИред Gunicorn рдХреЙрд▓ рдореЗрдВ --preload рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдареАрдХ рд╣реЛ рдЧрдИред

рдХреНрдпрд╛ рдпрд╣ рдмрдЧ рдЕрднреА рднреА рдареАрдХ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ? рдореИрдВ рдЗрд╕ рд╕рдЯреАрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред

рд╕рд┐рд╕реНрдЯрдордб рдореЗрдВ Gunicorn рдЗрд╕ рддрд░рд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:

[Service]
PIDFile = /run/gunicorn.pid
WorkingDirectory = /home/pi/pyTest
ExecStart=/usr/local/bin/gunicorn  app:app  -b 0.0.0.0:80 --pid /run/gunicorn.pid
RuntimeDirectory=/home/pi/pyTest
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all
User=root
Group=root
ExecReload = /bin/kill -s HUP $MAINPID
ExecStop = /bin/kill -s TERM $MAINPID
ExecStopPost = /bin/rm -rf /run/gunicorn
PrivateTmp = true

рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рдЧрд╛рддрд╛рд░ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдФрд░ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрддреА рд╣реИ:

Jul 10 15:19:20 raspberryVM gunicorn[10941]: [2020-07-10 15:19:20 -0700] [10941] [CRITICAL] WORKER TIMEOUT (pid:10944)
Jul 10 15:19:20 raspberryVM gunicorn[10941]: [2020-07-10 15:19:20 -0700] [10944] [INFO] Worker exiting (pid: 10944)
Jul 10 15:20:15 raspberryVM gunicorn[10941]: [2020-07-10 15:20:15 -0700] [10985] [INFO] Booting worker with pid: 10985

app.py рдПрдХ рдЯреНрд░рд┐рд╡рд▓ рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рди рдХрд░реЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рд╣реИ?

рдореБрдЭреЗ рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рдереА

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

рдЬрдм рдореИрдВрдиреЗ рдХрдиреЗрдХреНрд╢рди рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛, рддреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕рдорд╕реНрдпрд╛ рднреА рд╣рд▓ рд╣реЛ рдЧрдИ ...

рдпрд╣ рдореЗрд░рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ "рд╣реИрд▓реЛ, рд╡рд░реНрд▓реНрдб" рдкреНрд░рдХрд╛рд░ рдХреЗ рдРрдк рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рдереАред рддреЛ рдореИрдВ рдЕрднреА рднреА рдЗрд╕рд╕реЗ рд╣реИрд░рд╛рди рд╣реВрдВ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рд╣реЛрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрддреА рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдзрд╛рдЧреЗ рдХреЛ рдорд╛рд░ рджреЗрддреА рд╣реИред

@leonbrag
рдпрд╣ рд╕рдВрднрд╡рддрдГ рдПрдХ рдЧрдирд┐рдХреЛрд░реНрди рдмрдЧ рдирд╣реАрдВ рд╣реИред рдзрд╛рдЧреЗ рдореЗрдВ рдКрдкрд░ рдореЗрд░реА рдкреНрд░рд╢рдВрд╕рд╛ рджреЗрдЦреЗрдВред рдпрд╣ рдЦрд╛рд▓реА "рдЕрдиреБрдорд╛рдирд┐рдд" рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рднреЗрдЬрдиреЗ рд╡рд╛рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХрд╛ рд╕рд╛рдЗрдб-рдЗрдлреЗрдХреНрдЯ рд╣реИ, рдФрд░ рдЦрд╛рд▓реА рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕реЗ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рдХреБрдЫ рд╕рд┐рдВрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИред

рдХреНрдпрд╛ рдХреЛрдИ рд╕рдВрджрд░реНрдн рд╡рд╛рд╕реНрддреБрдХрд▓рд╛/рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдЬреЛ рд▓рдВрдмреЗ (рд╕реНрдерд╛рдпреА) рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ?

рдпрджрд┐ рдпрд╣ рдПрдХ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдпрд╛ рдЧрдирд┐рдХреЛрд░реНрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░/рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рд╕реАрдорд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

рд╕рд┐рдВрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╕реЙрдХреЗрдЯ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛, рдлрд┐рд░ рднреА рдмрд┐рдирд╛ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗ рдЪрд▓рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛ (рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдзрд╛рдЧрд╛ рдЪрд▓рдирд╛ рдЬрд╛рд░реА рд░рд╣реЗрдЧрд╛)ред

@leonbrag
рдЖрдк рдЬрд┐рд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛ рджреЗрд╡ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдпрд╛ рддреЛ рдЕрдзрд┐рдХ рд╕рд┐рдВрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ рдпрд╛ рдереНрд░реЗрдбреЗрдб рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред

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

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрдарди рд╣реИред
https://www.brianstorti.com/the-role-of-a-reverse-proxy-to-protect-your-application-against-slow-clients/

рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреГрд╖реНрда рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Async рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рд╣реИ
рд▓рдВрдмреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред

рд╢рдирд┐ 8 рдЕрдЧрд╕реНрдд 2020 18:00 leonbrag рдкрд░ рдкрд░ [email protected] рд▓рд┐рдЦрд╛ рд╣реИ:

рдХреНрдпрд╛ рдХреЛрдИ рд╕рдВрджрд░реНрдн рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░/рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдЬреЛ рд╕реЗрдЯ рдЕрдк рдХрд░рдиреЗ рдХрд╛ рдЙрдЪрд┐рдд рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ
рд▓рдВрдмреЗ (рд╕реНрдерд╛рдпреА) рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдЧрдирд┐рдХреЛрд░реНрди рдлреНрд▓рд╛рд╕реНрдХ рдРрдк?

рдЕрдЧрд░ рдпрд╣ рдмрдЧ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЖрд░реНрдЯрд┐рдлреИрдХреНрдЯ рдпрд╛ рдЗрд╕рдХреА рд╕реАрдорд╛ рд▓рдЧрддреА рд╣реИ
Gunicorn рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ / рдбрд┐рдЬрд╛рдЗрдиред

рд╕рд┐рдВрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЪрд▓реЗрдЧрд╛ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрдиреЗрдХреНрд╢рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ред рдРрд╕рд╛
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рд╕реЙрдХреЗрдЯ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛, рдлрд┐рд░ рднреА рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЪрд▓рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛
(рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдзрд╛рдЧрд╛ рдЪрд▓рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ)ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/1801#issuecomment-670944797 ,
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAADRIWRQGIP3R5PMVJ5ENTR7VZA3ANCNFSM4FDLD5PA
.

>

рдореЗрд░реЗ рдореЛрдмрд╛рдЗрд▓ рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛

рд╡реЗрдм: рдЧрдирд┐рдХреЛрд░реНрди - рд╡рд░реНрдХрд░реНрд╕ = 3 рдРрдк: рдРрдк - рдЯрд╛рдЗрдордЖрдЙрдЯ 200 - рд▓реЙрдЧ-рдлрд╛рдЗрд▓ -

рдореИрдВрдиреЗ --timeout . рдХреЛ рдмрдврд╝рд╛рдХрд░ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд┐рдпрд╛

рдбреЙрдХрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд tmpfs рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП #1388 рднреА рджреЗрдЦреЗрдВред

рдУрд╣, рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж рд░рд╛рдиреНрдбреЗрд▓, рдЬрдм рдореИрдВ рдбреЙрдХрд░ рдореЗрдВ рдЧрдирд┐рдХреЛрд░реНрди рдЪрд▓рд╛ рд░рд╣рд╛ рдерд╛, рддреЛ рдореИрдВ рдЧрдирд┐рдХреЛрд░реНрди рддрд░реНрдХреЛрдВ рдореЗрдВ --worker-tmp-dir /dev/shm рдЬреЛрдбрд╝рдирд╛ рднреВрд▓ рдЧрдпрд╛ рдерд╛ред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ 64 рдПрдордмреА рдЧрдирд┐рдХреЛрд░реНрди рдХреИрд╢ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛?

рдЧрдирд┐рдХреЛрд░реНрди рдРрдк: рдРрдк --рдЯрд╛рдЗрдордЖрдЙрдЯ 1000
рдпрд╛
рдЧрдирд┐рдХреЛрд░реНрди рдРрдк: рдРрдк --preload

рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ ... рдореИрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ рдПрдХ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдЬреАрдм, рдореИрдВрдиреЗ --worker-tmp-dir /dev/shm рдЬреЛрдбрд╝рд╛ рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

[2020-11-27 21:01:42 +0000] [1] [CRITICAL] WORKER TIMEOUT (pid:17)

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ /dev/shm ramfs рд╣реИ рдореИрдВрдиреЗ рдЗрд╕реЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХрд┐рдпрд╛ рд╣реИ:

image

рдкреИрд░рд╛ рдЕрдЧрд▓реЗ рд╣реИрдВ:

    command: /bin/bash -c "cd /code/ && pipenv run gunicorn --worker-tmp-dir /dev/shm conf.wsgi:application --bind 0.0.0.0:8022 --workers 5 --worker-connections=1000"

рдкреБрдирд╢реНрдЪ: рдореИрдВ PyPy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ

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

@ivictbor рдПрд▓рдПрдордХреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред 1000 рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд╣реИред рдлрд┐рд░ рднреА, рдПрдХ рдмрд╛рд░ рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдореБрдЭреЗ рдРрдк рд░реЛрд▓рд┐рдВрдЧ рдорд┐рд▓ рдЧрдпрд╛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдпрд╣ рддреНрд░реБрдЯрд┐ рд╕рдорд╕реНрдпрд╛ рднреА рдорд┐рд▓реА рдФрд░ рдХрдИ рдмрд╛рд░ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╢рд╛рдпрдж рдХрд╛рд░рдг рд╣реИ:

  1. рдирдЧреНрдиреЗрдХреНрд╕ рд╡рд┐рдиреНрдпрд╛рд╕
  2. Gunicorn / Uwsgi

рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдРрдк рдХреЛ рдЬреАрдПрдИ рдЬреИрд╕реЗ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдХреБрдЫ рднреА рд╕рдВрдХреЗрдд рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред
рдЖрдк рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддреНрд░реБрдЯрд┐ рдХреЛ рд╕рд╛рдордиреЗ рд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: https://stackoverflow.com/questions/38012797/google-app-engine-502-bad-gateway-with-nodejs

рдЕрдЧрд░ рдЙрдард╛рдпрд╛ 502 рдЦрд░рд╛рдм рдЧреЗрдЯрд╡реЗ;
рд╢рд╛рдпрдж 2 рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд╣реЛрдВрдЧреА:

  1. рдЧрдирд┐рдХреЛрд░реНрди рдирд╣реАрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ
  2. рдЧрдирд┐рдХреЛрд░реНрди рдХрд╛ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛

рдкреВрд░рд╛ рд╕рдорд╛рдзрд╛рди рдпрд╣рд╛рдБ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: https://www.datadoghq.com/blog/nginx-502-bad-gateway-errors-gunicorn/

рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рднреА [рдХреНрд░рд┐рдЯрд┐рдХрд▓] рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рд╣реИ, рдЗрд╕реЗ рдареАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рдЗрд╕ рд╕реВрддреНрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛ рдЬреЛрдбрд╝рдирд╛...

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

services:
  web_app:
    image: blah-blah
    deploy:
      resources:
        limits:
          cpus: "0.25"
          memory: 128M

рдФрд░ рдпреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ gunicorn рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдереЗ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ [CRITICAL] WORKER TIMEOUT рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдЬрдм рддрдХ рдХрд┐ рдореИрдВрдиреЗ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рджрд┐рдпрд╛ред

рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдВрд╕рд╛рдзрди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рд┐рдП
рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдорд╛рди
рдЖрд╡реЗрджрдиред рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП 128M рдФрд░ 0.25cpu рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдо рд▓рдЧрддрд╛ рд╣реИ
рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ .... рдЖрдо рддреМрд░ рдкрд░ рдмреЛрд▓рддреЗ рд╣реБрдП рдЖрдкрдХреЛ рдХрдо рд╕реЗ рдХрдо 1 рдХреЛрд░/рд╡реАрд╕реАрдкреАрдпреВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░
512MB RAM рдиреНрдпреВрдирддрдо рдХреЗ рд░реВрдк рдореЗрдВред

рд╢реБрдХреНрд░рд╡рд╛рд░ 26 рдорд╛рд░реНрдЪ 2021 рдХреЛ 02:14 рдмрдЬреЗ, рдХреЛрд▓реНрдЯрди рд╣рд┐рдХреНрд╕ @ . * > рд▓рд┐рдЦрд╛ рд╣реИ:

рдЗрд╕ рд╕реВрддреНрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рдирд╛ рдЬреЛрдбрд╝рдирд╛...

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

рд╕реЗрд╡рд╛рдПрдВ:
рд╡реЗрдм рдЕрдкреНрдк:
рдЫрд╡рд┐: рдмреНрд▓рд╛ рдмреНрд▓рд╛рд╣
рддреИрдирд╛рддреА:
рд╕рд╛рдзрди:
рд╕реАрдорд╛рдПрдВ:
рд╕реАрдкреАрдпреВ: "0.25"
рдореЗрдореЛрд░реА: 128M

рдФрд░ рдпреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрдирд┐рдХреЛрд░реНрди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рдереЗ рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрд╛рддрд╛рд░ [рдХреНрд░рд┐рдЯрд┐рдХрд▓] рдорд┐рд▓рд╛
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рддреНрд░реБрдЯрд┐ рдЬрдм рддрдХ рдореИрдВ рдмрд╛рдзрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рджреЗрддрд╛ред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/benoitc/gunicorn/issues/1801#issuecomment-807855647 ,
рдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/AAADRITPZB7BMA6QW7LFNVLTFPNV3ANCNFSM4FDLD5PA
.

>

рдореЗрд░реЗ рдореЛрдмрд╛рдЗрд▓ рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛

--рдЯрд╛рдЗрдордЖрдЙрдЯ = 1000 рдиреЗ рдореЗрд░реЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╕рдорд╕реНрдпрд╛ рдПрдХ рдХрдо-рд╕реАрдкреАрдпреВ рд╕рдВрд╕рд╛рдзрди рд╡рд╛рд▓реА рдЬреАрд╕реАрдкреА рдорд╢реАрди рдереАред рдпрд╣ рдореЗрд░реА рд╕реНрдерд╛рдиреАрдп рдорд╢реАрди рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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