(рдпрд╣рд╛рдВ рдПрдХрд╛рд▓рд╛рдк рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ: рд╕рд╛рдзрд╛рд░рдг рдЪреАрдЬреЗрдВ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдИрдВ рдФрд░ рдореИрдВрдиреЗ рдвреЗрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреБрджрд╛рдИ рд╕рдорд╛рдкреНрдд рдХрд░ рджреАред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХ рд╣реИред)
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╕рдордЭрд╛ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ:
30
рд╕реЗрдХрдВрдб ( timeout
рдХреЗ рд╕рд╛рде рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп) рдХреЗ рдмрд╛рдж, рдЧрдирд┐рдХреЛрд░реНрди рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╕реБрдВрджрд░ рдкреБрдирд░рд╛рд░рдВрдн рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ SIGTERM
рднреЗрдЬрддреА рд╣реИред30
рд╕реЗрдХрдВрдб ( graceful_timeout
рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп) рдХреЗ рджреМрд░рд╛рди рд╢рдЯрдбрд╛рдЙрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ SIGKILL
рднреЗрдЬрддреА рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХреЗрдд рддрдм рднреА рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ _does_ graceful_timeout
рдЕрд╡рдзрд┐ (https://github.com/benoitc/gunicorn/commit/d1a09732256fa8db900a1fe75a71466cf2645ef9) рдХреЗ рджреМрд░рд╛рди рдЗрдирд╛рдпрдд рд╕реЗ рд╢рдЯрдбрд╛рдЙрди рдХрд░рддрд╛ рд╣реИредрд╕рд╡рд╛рд▓реЛ рдХрд╛:
SIGTERM
рд╕рд┐рдЧреНрдирд▓ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ - рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рд╕рд┐рд░реНрдл рдбрдмреНрд▓реВрдПрд╕рдЬреАрдЖрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (рд╡рд░реНрдХрдЬрд╝реЗрдЧ рд╕реНрддрд░ рдкрд░) рдХреЗ рд▓рд┐рдП рдзреНрд╡рдЬ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреВрд░реНрдг рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ SIGTERM
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд▓ рд░рд╣реЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЖрдИрдУ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЛ рдпрд╛ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рддреЗрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ ...?SIGKILL
рдкрд░, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЬрдмрд░рджрд╕реНрддреА рдирд┐рд░рд╕реНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдкреАрдЖрд░ рджрд░реНрдЬ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдЕрдЧрд░ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВред
рд╣рдореНрдо, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/benoitc/gunicorn/issues/1236#issuecomment -254059927 SIGTERM
рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрд░реА рдзрд╛рд░рдгрд╛рдУрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реИ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдмрд╕ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдирд╛ (рдФрд░ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░рдирд╛) рдХреЛрдИ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди)ред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ timeout
рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреИрд╕реЗ рдХреА рдФрд░ graceful_timeout
рдЧрд▓рдд рд╣реИред рджреЛрдиреЛрдВ рдЕрд╡рдзрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рдордп рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ 30
рд╕реЗрдХрдВрдб рдкрд░ рд╕реЗрдЯ рд╣реИрдВ, рдХреЛрдИ рднреА рд╢рд╛рдирджрд╛рд░ рдкреБрдирд░рд╛рд░рдВрдн рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдореИрдВ --graceful-timeout 15 --timeout 30
рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ 15 рд╕реЗрдХрдВрдб рдореЗрдВ рдЧреНрд░реЗрд╕рдлреБрд▓ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 30 рд╕реЗрдХрдВрдб рдореЗрдВ рд╡рд░реНрдХрд░ рдХреЛ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЕрдЧрд░ рдЕрдиреБрд░реЛрдз рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реБрдЖред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ graceful_timeout
рдФрд░ timeout
рдХреЗ рдмреАрдЪ рд▓реМрдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рд╣реИ рдирд╛?
рдореИрдВрдиреЗ app.py
рджреНрд╡рд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛:
import time
from flask import Flask
app = Flask(__name__)
@app.route('/foo')
def foo():
time.sleep(3)
return 'ok'
рдлрд┐рд░:
12:51 $ gunicorn app:app --timeout 5 --graceful-timeout 1
[2017-04-03 12:51:37 +0300] [356] [INFO] Starting gunicorn 19.6.0
[2017-04-03 12:51:37 +0300] [356] [INFO] Listening at: http://127.0.0.1:8000 (356)
[2017-04-03 12:51:37 +0300] [356] [INFO] Using worker: sync
[2017-04-03 12:51:37 +0300] [359] [INFO] Booting worker with pid: 359
рдлрд┐рд░ рдореИрдВ curl localhost:8000/foo
рднреЗрдЬрддрд╛ рд╣реВрдВ, рдЬреЛ 3 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЧрдирд┐рдХреЛрд░реНрди рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░реЗрд╕рдлреБрд▓ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рд╢реБрд░реВ рд╣реЛрдиреЗ рдпрд╛ рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдирд┐рд╢рд╛рди рдирд╣реАрдВ рд╣реИ?
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ timeout
рдкрд░, SystemExit(1,)
рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдлреНрд▓рд╛рд╕реНрдХ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд┐рд░рд╕реНрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреМрди рд╕рд╛ рдХреЛрдб рдпрд╛ рд╕рд┐рдЧреНрдирд▓ рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ред
рдпрд╣ рдЕрдкрд╡рд╛рдж рдлреНрд▓рд╛рд╕реНрдХ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлреЗрдВрдХрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЛрдИ рднреА teardown_request
рд╣реИрдВрдбрд▓рд░ рдЗрд╕реЗ рдкрдХрдбрд╝ рд▓реЗрддрд╛ рд╣реИред рдХреБрдЫ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╕рдордп рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╣реИрдВрдбрд▓рд░ рдореЗрдВ time.sleep(1)
рдпрд╛ рдХреБрдЫ рдФрд░ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЪреБрдкрдЪрд╛рдк рдорд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдРрд╕рд╛ рд╣реИ рдЬреИрд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд▓рдкреВрд░реНрд╡рдХ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 100-200ms рд╕рдордп рдерд╛ рдФрд░ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рджреЗрд░реА рдХреНрдпрд╛ рд╣реИред рдпрд╣ рд╕реБрдВрджрд░ рд╕рдордпрдмрд╛рд╣реНрдп рдирд╣реАрдВ рд╣реИ, рдЙрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХрд╛ рд╡рд┐рд▓рдВрдм рдкрд░ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИред рдореИрдВ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ SystemExit
рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЬрдмрд░рджрд╕реНрддреА рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдордзреНрдп-рд╣рд╡рд╛ рдореЗрдВ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ graceful_timeout
рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реБрдП рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ - рд╢рд╛рдпрдж рдпрд╣ рд╕рд┐рдВрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ "рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди" (рдпрд╛ timeout
рдХреЗ рд╕рд╛рде) рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдХреЗрд╡рд▓ рдЬрдм рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ SIGTERM
рднреЗрдЬрддреЗ рд╣реИрдВ?
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЬреЛ рдЕрдЬреАрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ https://github.com/benoitc/gunicorn/blob/master/gunicorn/arbiter.py#L392 graceful
рдзреНрд╡рдЬ рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/benoitc/gunicorn/blob/master/gunicorn/arbiter.py#L390 рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ self.WORKERS
рдЦрд╛рд▓реА рд╣реИ рдЗрд╕рд▓рд┐рдП рдЧреИрд░-рд╕реБрдВрджрд░ рд╕реНрдЯреЙрдк рдХрд░рддреЗ рд╕рдордп рд╕реБрдВрджрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред
@benoitc @tilgovi рдпрд╣рд╛рдВ рд╣рд╛рде рджреЗрдиреЗ рдХреА рджреЗрдЦрднрд╛рд▓? рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдКрдкрд░ рдореЗрд░реЗ рд▓реЗрдЦрди рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ ...
@ tuco86 graceful timeout
рдХреЗрд╡рд▓ рддрднреА рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдк рдордзреНрдпрд╕реНрде рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддреЗ рд╣реИрдВ (USR2), рдордзреНрдпрд╕реНрде рдХреЛ рдПрдХ HUP рд╕рдВрдХреЗрдд рднреЗрдЬрддреЗ рд╣реИрдВ рдпрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдПрдХ QUIT рд╕рдВрдХреЗрдд рднреЗрдЬрддреЗ рд╣реИрдВред рдпрд╛рдиреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреНрд░рд┐рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрддреА рд╣реИ
рд╡реНрдпрд╕реНрдд рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЕрдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордпрдмрд╛рд╣реНрдп рдпрд╣рд╛рдБ рд╣реИред рдпрджрд┐ рд╡реЗ timeout
рд╕реЗ рдХрдо рд╕рдордп рдореЗрдВ рдордзреНрдпрд╕реНрде рдХреЛ рд╕реВрдЪрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдмрд╕ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрд╣, рдареАрдХ рд╣реИред рдХреНрдпрд╛ timeout
рдХрд╛ рдХреЛрдИ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрдм рдЖрдк:
рдордзреНрдпрд╕реНрде рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВ, рдЗрд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ (USR2), рдордзреНрдпрд╕реНрде рдХреЛ рдПрдХ HUP рд╕рдВрдХреЗрдд рднреЗрдЬреЗрдВ рдпрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдПрдХ QUIT рд╕рдВрдХреЗрдд рднреЗрдЬреЗрдВ
рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ graceful_timeout
рдореЗрдВ рд╢рдЯрдбрд╛рдЙрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдЙрд╕рдХреЗ рдмрд╛рдж timeout
рдХрд┐рдХ рдХрд░реЗрдЧрд╛ рдФрд░ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЛ рдмрд▓рдкреВрд░реНрд╡рдХ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП SIGQUIT
рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрдХреЗрдд рдЫреЛрдбрд╝реЛ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм TERM
рдерд╛ (рдЬреИрд╕рд╛ рдХрд┐ QUIT
рдХреЛ рдорд╛рд╕реНрдЯрд░ рдФрд░ рд╢реНрд░рдорд┐рдХреЛрдВ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП _quick рд╢рдЯрдбрд╛рдЙрди_ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)?
рдпрджрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реБрдВрджрд░ рд╕рдордп рдХреЗ рджреМрд░рд╛рди рдмрдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддреЛ рдЙрд╕реЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рджреЗрд░реА рдХреЗ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдмреЗрд╢рдХред рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
@benoitc рдЗрд╕ рдкреБрд░рд╛рдиреЗ рдЯрд┐рдХрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкреВрдЫрдирд╛ - timeout
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд╛рдХреНрдп рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ?
рдЖрдо рддреМрд░ рдкрд░ рддреАрд╕ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░реЗрдВред рдЗрд╕реЗ рдХреЗрд╡рд▓ рддрднреА рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрдм рдЖрдк рд╕рд┐рдВрдХ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирддреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛрдВред рдЧреИрд░-рд╕рд┐рдВрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрднреА рднреА рд╕рдВрдЪрд╛рд░ рдХрд░ рд░рд╣реА рд╣реИ рдФрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рдХреА рд▓рдВрдмрд╛рдИ рд╕реЗ рдмрдВрдзреА рдирд╣реАрдВ рд╣реИред
рдПрдХ рджреЗрд╢реА рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдореБрдЭреЗ рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддреА рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ timeout
рдЧреИрд░-рд╕рд┐рдВрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдпрд╣реА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ: рдореИрдВ gthread
рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдмрд╣реБрдд рдзреАрдореА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдорд╛рд░ рд░рд╣рд╛ рд╣реИ )?
@tuukkamustonen --timeout
рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЬреАрд╡рд┐рдХрд╛ рдЬрд╛рдВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рд╕рд┐рдВрдХ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╢реНрд░рдорд┐рдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рднреА рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЗрд╕реЗ рдмреНрд▓реЙрдХ/рдлреНрд░реАрдЬ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рддрдм рддрдХ рдЗрд╕реЗ рдирд╣реАрдВ рдорд╛рд░рд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирд╛рдо рдмрджрд▓рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИред
@tilgovi timeout
рдареАрдХ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ worker_timeout
рдЬреИрд╕рд╛ рдХреБрдЫ рдЕрдзрд┐рдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЕрднреА рд╢реБрд░реВ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реЛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ timeout
рдФрд░ graceful_timeout
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдиреЗ рдорд╛рдирд╛ рдХрд┐ рд╡реЗ рдХрд╕рдХрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рдЬрдмрдХрд┐ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВред
рд╕рд┐рдВрдХ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╢реНрд░рдорд┐рдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рднреА рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЗрд╕реЗ рдмреНрд▓реЙрдХ/рдлреНрд░реАрдЬ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рддрдм рддрдХ рдЗрд╕реЗ рдирд╣реАрдВ рдорд╛рд░рд╛ рдЬрд╛рдПрдЧрд╛ред
рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛ рдЬрдм timeout
рдЧреИрд░-рд╕рд┐рдВрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╣реИ рдЬреЛ рдХрднреА рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ - рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдЕрдЧрд░ рдХреЛрдИ рдмрдЧ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдЕрд╡рд░реБрджреНрдз/рдлреНрд░реАрдЬ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ?
рдпрд╣ рд╕рд╣реА рд╣реИред рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд░реНрдХрд░ рдЬреЛ рдПрдХ рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╕реАрдкреАрдпреВ рдЧрд╣рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рднреАрддрд░ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рди рдХреЗрд╡рд▓ рдПрдХ рдмрдЧ, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдпрд╣ рдПрдХ рдмрдЧ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдЕрд╡рд░реБрджреНрдз I/O рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдЬрдм рдПрдХ asyncio рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдЧрд╛ред
рд╕реАрдкреАрдпреВ рдЧрд╣рди рдХрд╛рд░реНрдп рдореЗрдВ рдлрдВрд╕рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдзрдиреНрдпрд╡рд╛рджред
Async рдХреЛрдб рдореЗрдВ I/O рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рднреА рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ - рдореИрдВ рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреЛрдб рдХреЗ рд╕рд╛рде рдПрдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдХ рдПрд╕рд┐рдВрдХ рд╡рд░реНрдХрд░ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ ( gthread
) рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрдВрджрд░ рдкреИрдЪрд┐рдВрдЧ рдХреЗред рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдм рдЗрд╕ рдЯрд┐рдХрдЯ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрд╕рд┐рдВрдХ/рд╕рд┐рдВрдХ рдХреЛрдб рдХреЛ рдорд┐рд╢реНрд░рдг рдФрд░ рдорд┐рд▓рд╛рди рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рдЖрддреА рд╣реИрдВ?
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдХрд╛ рдЕрдВрддрд░рд╛рд▓ рдХреНрдпрд╛ рд╣реИ? рдЧреИрд░-рд╕рд┐рдВрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд╕рд╛рде timeout
рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордЭрджрд╛рд░ рдореВрд▓реНрдп рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
gthread рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЯрд╛рдЗрдордЖрдЙрдЯ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЙрд╕ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рд╢рд╛рдпрдж рдПрдХ рдЯрд╛рдЗрдордЖрдЙрдЯ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднрд╛рд░рд┐рдд рди рд╣реЛ рдпрд╛ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЖрдк рдПрдХ рд╕реА рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЙрдбреНрдпреВрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЬреАрдЖрдИрдПрд▓ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдЬрдм рддрдХ рдЖрдк рд╡рд░реНрдХрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рджреЗрдЦрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЯрд╛рдЗрдордЖрдЙрдЯ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред
рдареАрдХ рд╣реИред рдмрд╕ рдПрдХ рдФрд░ рдмрд╛рдд:
gthread рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реИ
рдпрд╣ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ gthread
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ async рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди http://docs.gunicorn.org/en/stable/design.html#asyncio -workers рдкрд░ "AsyncIO" рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рдереНрд░реЗрдбреНрд╕" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд╕рд┐рдВрдХреНрд╕рд┐рдпреЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкрд╛рдардХ рдореЗрдВ рднреА рд╕рд╡рд╛рд▓ рдЙрдарддреЗ рд╣реИрдВред рдПрдХ рднреЛрд▓реЗ-рднрд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдпрд╣ рдХрд╣рдирд╛, рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рд╕рдм рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, gthread
рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ asyncio
lib рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рдВрдХ рдХреЛрдб рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрд╛рдЧреЗ рдХреЛ рдЬрдиреНрдо рджреЗрддрд╛ рд╣реИред рдЕрдЧрд░ рдЧрд▓рдд рд╣реЛ рддреЛ рдореБрдЭреЗ рд╕реБрдзрд╛рд░реЛред
рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдкреВрдЫрд╛!
рдереНрд░реЗрдбреЗрдб рд╡рд░реНрдХрд░ asyncio рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмреЗрд╕ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╡рд░реНрдХрд░ рдХреНрд▓рд╛рд╕ рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╣рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдПрд╕рд┐рдВрдХреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рд╕рдорд╡рд░реНрддреА рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рд▓рдВрдмреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рд╕рдорд╡рд░реНрддреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рд┐рдВрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрд╕рд┐рдВрдХ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рд╕рднреА рд╢реНрд░рдорд┐рдХреЛрдВ рдХрд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
рд╣рд╛рдБ gthreads рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ asyncio рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЦрдВрдб рдмреЗрд╣рддрд░ рд╣реЛ?
рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛ рддрд╛рдХрд┐ рд╣рдо рдЗрд╕реЗ рд╡рд░реНрдХрд░ рдкреНрд░рдХрд╛рд░ рдФрд░ рдЯрд╛рдЗрдордЖрдЙрдЯ рдкрд░ рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХреЗрдВред
@tilgovi
--рдЯрд╛рдЗрдордЖрдЙрдЯ рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЬреАрд╡рд┐рдХрд╛ рдЬрд╛рдВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рд╕рд┐рдВрдХ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╢реНрд░рдорд┐рдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рднреА рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЗрд╕реЗ рдмреНрд▓реЙрдХ/рдлреНрд░реАрдЬ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рддрдм рддрдХ рдЗрд╕реЗ рдирд╣реАрдВ рдорд╛рд░рд╛ рдЬрд╛рдПрдЧрд╛ред
рдХреНрдпрд╛ рдПрд╕рд┐рдВрдХреНрд╕ рд╡рд░реНрдХрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИ? рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреЗ рднреАрддрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдордзреНрдпрд╕реНрде рдХреИрд╕реЗ рдорд╛рд░ рд╕рдХрддрд╛ рд╣реИ?
@aschatten рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдирд╣реАрдВ рд╣реИред #1658 рднреА рджреЗрдЦреЗрдВред
рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЛ рдЬрд┐рд╕рдиреЗ рдПрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдХреЗ рднреАрддрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛
рдЪреВрдВрдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рд╕рд╛рде рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдорд╛рд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рдордп рдмрд╣реБрдд рдЪрд░рдо рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдиреНрдп рд╕рднреА рдЕрдиреБрд░реЛрдз рд╡реНрдпрд░реНрде рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ?
рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдпреВрдбрдмреНрд▓реНрдпреВрдПрд╕рдЬреАрдЖрдИ 2.1 рдпрд╛ рддреЛ рдореЗрдВ рдереНрд░реЗрдб-рдЖрдзрд╛рд░рд┐рдд рд╣рддреНрдпрд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдпрд╣ рдХреЗрд╡рд▓ рд╕рд┐рдВрдХ/рдереНрд░реЗрдбреЗрдб рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ (рдФрд░ рдЗрд╕ рдкрд░ рдореЗрд░реА рдпрд╛рдж рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ)ред
рдЪреВрдВрдХрд┐ рдПрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдПрдХ рд╕рд╛рде рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдкреВрд░реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдорд╛рд░ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд╛ рд╕рдордп рдмрд╣реБрдд рдЪрд░рдо рд▓рдЧрддрд╛ рд╣реИред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЕрдиреНрдп рд╕рднреА рдЕрдиреБрд░реЛрдз рд╡реНрдпрд░реНрде рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ?
рджреГрд╖реНрдЯрд┐рдХреЛрдг max_request
рдХреЗ рд╕рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрддрд╛ рд╣реИред
рд╣рдо рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдПрдХ рд░рд┐рд▓реАрдЬ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдпрд╣ _may_ R20 рдХреЗ рд▓рд┐рдП рд╢рд╛рдЦрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдо рдХреБрдЫ рдкреНрд░рдореБрдЦ рдЪреАрдЬреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдЙрдЪрд┐рдд рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрдВ рдмрдирд╛рдиреЗ рдХрд╛ рдпрд╣ рд╕рд╣реА рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдпрд╣рд╛рдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдирд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ рдпрд╛ рдирд╣реАрдВред
рдореИрдВ рдЬреЛ рдЖрдИрдПрдордУ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ:
рдкреНрд░рддреНрдпреЗрдХ рдЕрдзрд┐рдХрддрдо-рдЕрдиреБрд░реЛрдз рдЕрдиреБрд░реЛрдз (рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдЕрдиреБрд░реЛрдз рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реНрдг рд╣реЛ рдЧрдП рд╣реИрдВред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ 4 рдЕрдиреБрд░реЛрдз рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдиреБрд░реЛрдз 1, 2 рдФрд░ 4 рд╕рдлрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЕрдиреБрд░реЛрдз 3 рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд┐рдиреНрдпрд╛рд╕:
import time
def app(environ, start_response):
start_response('200 OK', [('Content-type', 'text/plain; charset=utf-8')])
time.sleep(5)
return [b"Hello World\n"]
рдЧрдирд┐рдХреЛрд░реНрди:
gunicorn --log-level debug -k gthread -t 4 --max-requests 3 "app:app"
...
[2018-02-08 10:11:59 +0200] [28592] [INFO] Starting gunicorn 19.7.1
[2018-02-08 10:11:59 +0200] [28592] [DEBUG] Arbiter booted
[2018-02-08 10:11:59 +0200] [28592] [INFO] Listening at: http://127.0.0.1:8000 (28592)
[2018-02-08 10:11:59 +0200] [28592] [INFO] Using worker: gthread
[2018-02-08 10:11:59 +0200] [28595] [INFO] Booting worker with pid: 28595
[2018-02-08 10:11:59 +0200] [28592] [DEBUG] 1 workers
[2018-02-08 10:12:06 +0200] [28595] [DEBUG] GET /
[2018-02-08 10:12:11 +0200] [28595] [DEBUG] Closing connection.
[2018-02-08 10:12:15 +0200] [28595] [DEBUG] GET /
[2018-02-08 10:12:20 +0200] [28595] [DEBUG] Closing connection.
[2018-02-08 10:12:23 +0200] [28595] [DEBUG] GET /
[2018-02-08 10:12:23 +0200] [28595] [INFO] Autorestarting worker after current request.
[2018-02-08 10:12:27 +0200] [28592] [CRITICAL] WORKER TIMEOUT (pid:28595)
[2018-02-08 10:12:27 +0200] [28595] [INFO] Worker exiting (pid: 28595)
[2018-02-08 10:12:28 +0200] [28595] [DEBUG] Closing connection.
[2018-02-08 10:12:28 +0200] [28599] [INFO] Booting worker with pid: 28599
[2018-02-08 10:12:32 +0200] [28599] [DEBUG] GET /
[2018-02-08 10:12:37 +0200] [28599] [DEBUG] Closing connection.
^C[2018-02-08 10:12:39 +0200] [28592] [INFO] Handling signal: int
рдЧреНрд░рд╛рд╣рдХ:
[salonen<strong i="19">@mac</strong> ~]$ curl http://127.0.0.1:8000
Hello World
[salonen<strong i="20">@mac</strong> ~]$ curl http://127.0.0.1:8000
Hello World
[salonen<strong i="21">@mac</strong> ~]$ curl http://127.0.0.1:8000
curl: (52) Empty reply from server
[salonen<strong i="22">@mac</strong> ~]$ curl http://127.0.0.1:8000
Hello World
рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рдпреЛрдЬрдирд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП? рдореЗрд░реЗ рдорди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИ:
рдХреНрдпрд╛ рдпрд╣ 20.0 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рд╣рдо рдЗрд╕реЗ рд╕реНрдердЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рд╕реНрдердЧрд┐рдд рдХрд░рдирд╛
рдЕрд░реЗ, рддреЛ рдпрд╣ 20.0 рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛?
рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЛ рдЙрдЪрд┐рдд рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдореЗрдВ рдмрдирд╛рдиреЗ рдХрд╛ рдпрд╣ рд╕рд╣реА рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ред @ lucas03 рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреНрдпрд╛ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреБрдЫ рдЦрд╛рд╕ рдЪрд╛рд╣рд┐рдП рддреЛ рдХреГрдкрдпрд╛ рдЯрд┐рдХрдЯ рдЦреЛрд▓реЗрдВред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@tuukkamustonen
--timeout
рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЬреАрд╡рд┐рдХрд╛ рдЬрд╛рдВрдЪ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред рд╕рд┐рдВрдХ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЕрдиреБрд░реЛрдз рдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╢реНрд░рдорд┐рдХ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рджреМрд░рд╛рди рднреА рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдЗрд╕реЗ рдмреНрд▓реЙрдХ/рдлреНрд░реАрдЬ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рддрдм рддрдХ рдЗрд╕реЗ рдирд╣реАрдВ рдорд╛рд░рд╛ рдЬрд╛рдПрдЧрд╛редрд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдирд╛рдо рдмрджрд▓рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИред