<p>werkzeug.serves.run_simple SIGTERM рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ</p>

рдХреЛ рдирд┐рд░реНрдорд┐рдд 9 рдордИ 2011  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pallets/werkzeug

рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ SIGTERM , рддреЛ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХреБрдЫ рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдХреБрдЫ рднреА рдЫрдкрд╛рдИ рдХреЗ рдмрд┐рдирд╛ред

werkzeug.serving.run_simple рдкреНрд░рдХреНрд░рд┐рдпрд╛ SIGTERM рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЖрдорддреМрд░ рдкрд░ 141 рдХреЗ рд░рд┐рдЯрд░реНрди рдХреЛрдб рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ (рдПрдХ рд╕рдВрдпреБрдХреНрдд рд░рд╛рд╖реНрдЯреНрд░ / рдЕрдирд░реНрдерд┐рдд SIGPIPE рдХрд╛ рд▓рдХреНрд╖рдг), рдФрд░ рдкреБрдирдГ рд▓реЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд╝реЛрдВрдмреА рд╣реЛ рдЬрд╛рддреА рд╣реИ (рдпрд╣) рдкреЛрд░реНрдЯ рдХреЛ рдмрдВрдзреЗ рд░рд╣рдиреЗ рдХреЗ рдХрд╛рд░рдг рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдорд╛рд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

SIGTERM рд▓рд┐рдП рдПрдХ рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдирд╛ рдЬреЛ рдХреЗрд╡рд▓ sys.exit(0) рдЪрд╛рд▓рд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ (рдЗрд╕рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХреЛрдИ рдФрд░ рдЕрдзрд┐рдХ рджреБрд░реНрд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рдлрд┐рдХреНрд╕ рд╣реИред

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

рдЗрд╕ рдмрдЧ рд╕реЗ рднреА рдорд╛рд░рд╛, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ docker stop SIGTERM werkzeug- рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕рд░реНрд╡рд░ (рдореЛрдЯреЛ) рдХреЛ рднреЗрдЬ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдиреЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ docker рдиреЗ SIGKILL рд╕рд╛рде рдЗрд╕реЗ рдорд╛рд░ рдбрд╛рд▓рд╛ред рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдирд┐рдХрд╛рд╕ рдХреЛрдб рдореЗрдВред

рдбреЙрдХрдлрд╝рд░рд╛рдЗрд▓ ( STOPSIGNAL SIGINT ) рдореЗрдВ рдкрд╕рдВрджреАрджрд╛ рд╕реНрдЯреЙрдк рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ SIGINT (Ctrl + C) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдерд╛, рдЗрд╕рдХреЗ рдмрд╛рдж рдХрдВрдЯреЗрдирд░ рд╕рд╛рдл рдмрдВрдж рд╣реЛ рдЧрдПред

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

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

рдпрд╣ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдареАрдХ рд╣реИ? рдпрд╣ рдЕрднреА рднреА рдлреНрд▓рд╛рд╕реНрдХ 0.8 рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред

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

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд░рдВрддрд░ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдЖрдЬ рдЖрдИрдЖрд░рд╕реА рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░реНрдЪрд╛ рджреЗрдЦреЗрдВред

20:20 < mcdonc> can somebody fix flask's reloader so when you send the process a sigint it actually stops the child process
20:20 < untitaker> mcdonc: it seems to work for me
20:21 < untitaker> mcdonc: it used to cause problems but for me it's fixed in latest master
20:21 < mcdonc> ah good.  i just got some number of complaints from people who run it under supervisor.
20:22 < untitaker> mcdonc: you are talking about the one from the Py3 port?
20:22 < untitaker> released versions should work properly
20:22 < mcdonc> no.. i am talking about.. well.. yes, i dont actually know what i'm talking about ;-)  i dont use it, i just get people telling me they need to send a stop signal to the entire process group instead of to the process to make sure its killed.
20:23 < mcdonc> this is not recent.. for the last year or so
20:23 < mcdonc> why people run the reloader under supervisor (presumably in production) i cannot fathom
20:23 < mcdonc> but they do
20:24 < Alex_Gaynor> mcdonc: I've toyed with using supervisord in dev, FWIW
20:24 < Alex_Gaynor> mcdonc: for cases where you don't just have web proc, you've also got background daemons and such, it could be nice
[...]
20:32 < DasIch> untitaker: the supervisor issue is independent from the threading/thread issue
20:32 < untitaker> DasIch: ah okay
20:32 < untitaker> didn't know that
20:32 < untitaker> DasIch: is the reloader behaving weird in supervisor?
20:33 < DasIch> untitaker: I guess what happens if you run the reloader in supervisor is that supervisor kill the reloading process but that doesn't kill the process started by the reloader
20:34 < untitaker> DasIch: couldn't one write a wrapper shell script that kills both?
20:34 < untitaker> at least for now
20:34 < DasIch> untitaker: I think you shouldn't use the reloader in production
20:35 < untitaker> well yeah
20:35 < asdf`> (supervisord has a 'kill as group' thing)
20:35 < DasIch> right there is that as well
20:35 < asdf`> (it even mentions the werkzeug reloader in the docs paragraph about it!)
20:36 < mcdonc> yes i put it there
20:37 < asdf`> (then you might want to fix it, because AFAIR it actually says 'flask', while the reloader is part of werkzeug. But i admit 'flask' is something more people will know)
20:37 < mcdonc> nobody reads docs anyway ;)
20:38 < DasIch> I just wanted to mention I don't care unless someone creates an issue with a valid use case for that but apparently this seems to be it https://github.com/mitsuhiko/werkzeug/issues/58
20:38 < mcdonc> like alex said, it's not entirely crazy to want to use the reloader under supervisor in dev, esp. if your app is reliant on other processes being started
20:39 < mcdonc> i actually dont run my own apps under supervisor, but that's because i don't use a reloader, i just press ctrl-c.. because i'm a savage
20:40 < DasIch> I do use the reloader but I tend to save so often with bad syntax that I end up restarting manually all the time

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред

os.kill(parent_id, signal.SIGTERM) рдмрдЪреНрдЪреЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рдорд╛рд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ werkzeug.serving рд▓рд┐рдП testuite рдХреЛ рдкреБрдирдГрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВрдиреЗ рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдореВрд╣ рдХреЛ рдорд╛рд░рдХрд░ рдЗрд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд┐рдпрд╛: https://github.com/mitsuhiko/werkzeug/blob/a00377315bbf02ec48fdad22c6bb08433fc1b9c1/tests/conftest.py#L158

рдореИрдВ рдлреНрд▓рд╛рд╕реНрдХ рдореЗрдВ рдбрд┐рдмрдЧ рдореЛрдб (use_debugger = True) рдХреЗ рд╕рд╛рде рдЗрд╕реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ "рдореВрд▓" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ 0 рдХрд╛ рд░рд┐рдЯрд░реНрди рдХреЛрдб рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдбрд┐рдмрдЧ рдореЛрдб рд╕рдХреНрд╖рдо рдХрд┐рдП рдмрд┐рдирд╛, SIGTERM рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ 143 рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рддреА рд╣реИред рдкрд╛рдпрдерди 2.7.5ред

рдЗрд╕ рдмрдЧ рд╕реЗ рднреА рдорд╛рд░рд╛, рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ docker stop SIGTERM werkzeug- рд╕рдВрдЪрд╛рд▓рд┐рдд рд╕рд░реНрд╡рд░ (рдореЛрдЯреЛ) рдХреЛ рднреЗрдЬ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдиреЗ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдлрд┐рд░ docker рдиреЗ SIGKILL рд╕рд╛рде рдЗрд╕реЗ рдорд╛рд░ рдбрд╛рд▓рд╛ред рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рдирд┐рдХрд╛рд╕ рдХреЛрдб рдореЗрдВред

рдбреЙрдХрдлрд╝рд░рд╛рдЗрд▓ ( STOPSIGNAL SIGINT ) рдореЗрдВ рдкрд╕рдВрджреАрджрд╛ рд╕реНрдЯреЙрдк рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд░реВрдк рдореЗрдВ SIGINT (Ctrl + C) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдерд╛, рдЗрд╕рдХреЗ рдмрд╛рдж рдХрдВрдЯреЗрдирд░ рд╕рд╛рдл рдмрдВрдж рд╣реЛ рдЧрдПред

рдбреЙрдХрд░ рдХреЗ рдЕрдВрджрд░ рдлреНрд▓рд╛рд╕реНрдХ рдРрдк рдЪрд▓рд╛рддреЗ рд╕рдордп рдореБрдЭреЗ рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ; рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдВрдЯреЗрдирд░ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП STOPSIGNAL SIGINT рдЕрднреА рднреА рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ SIGKILL ред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ 2.7 рдФрд░ 3.7 рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдкрд╛рдпрдерди рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:

FROM python:2.7

WORKDIR /usr/src/app

RUN pip install click \
                werkzeug \
                sqlalchemy \
                jinja2

COPY . .

RUN python manage-shorty.py initdb

ENTRYPOINT ["python"]

CMD ["manage-shorty.py", "runserver"]

рдФрд░ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде examples рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рд╕реЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛:

 docker build -t werkzeug-examples .

рдореИрдВ рддрдм рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рддреНрдордХ рдореЛрдб рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдКрдВрдЧрд╛ рдФрд░ рдЙрд╕рдХреЗ рд╕рд╛рде рд░рджреНрдж рдХрд░реВрдВрдЧрд╛:

$ docker run -it --name werkzeug-example werkzeug-examples
 * Running on http://localhost:5000/ (Press CTRL+C to quit)
 * Restarting with stat
^C

docker ps рдЪрд▓рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ 0 :

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                      PORTS               NAMES
8c708ea4ef77        werkzeug-examples   "python manage-shortтАж"   About a minute ago   Exited (0) 58 seconds ago                       werkzeug-example

рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдирд╛ рдФрд░ docker stop werkzeug-example рд╕рд╛рде рд░реБрдХрдирд╛ рднреА 0 рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдбреЙрдХрд░ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдЗрди рдХрдорд╛рдВрдбреЛрдВ рдХреЛ рдЪрд▓рд╛рдпрд╛:

Client: Docker Engine - Community
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        6247962
 Built:             Sun Feb 10 04:12:39 2019
 OS/Arch:           darwin/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 04:13:06 2019
  OS/Arch:          linux/amd64
  Experimental:     false

рдХреНрдпрд╛ рдЖрдк рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрднрд╡ рдХреА рдЬрд╛ рд░рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

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

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

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

miki725 picture miki725  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

androiddrew picture androiddrew  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mrx23dot picture mrx23dot  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

golf-player picture golf-player  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

paihu picture paihu  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ