์ฐ๋ฆฌ ๋ชจ๋ ์๊ณ ์๋ฏ์ด socket.send()๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ก๋๋ ๊ฒ์ ๋ณด์ฅํ์ง ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์ค:
https://github.com/pallets/werkzeug/blob/03faf0569861e9d8c8c94785ad5560f735ba72da/werkzeug/serving.py#L165
gevent ๋ฐ docker๋ก ์๋ ค์ง ์ต๊ณ ์ ์น์ค์ผ์ผ ๊ธฐ์ ๊ณผ ๊ฒฐํฉํ์ฌ ์๋ต์ด ์๋ฆฌ๋ ๋์์ ํ๊ฒ ๋์์ต๋๋ค.3
socket.SocketIO๊ฐ ์ ๊ฒฝ์จ์ผ ํ ๊ฒ ๊ฐ์ง๋ง ๊ทธ๋ ์ง ์์ต๋๋ค.
๋น์ ์ด ์ณ์ ์๋ ์์ง๋ง(์๋ฌด๋ฐ ์กฐ์ฌ๋ ํ์ง ์์์) Werkzeug์ ์๋ฒ๋ ๊ฐ๋ฐ์ฉ์ผ๋ก๋ง ์ฌ์ฉ๋๋ค๋ ์ ์ ์ ์ํ์ญ์์ค. Docker์์ gevent๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ๋ฉด ํด๋น ์ฉ๋๋ก ์ฌ์ฉํ์ง ์๋๋ค๊ณ ๋ฏฟ๊ฒ ๋ฉ๋๋ค.
๋๋ ์ค์ ๋ก ๊ฐ๋ฐ์ ์ํด ๋์ปค๋ฅผ ์ฌ์ฉํ๊ณ ์ฝ๋์ ์ผ๋ถ๋ gevent monkeypatches๋ฅผ ์์ฃผ ๊ฒฝ์ํ๊ฒ ์ฌ์ฉํ์ต๋๋ค.
dontpanic์ด ๊นจ์ง์ง ์์ผ๋ฉด ๋์น์ฑ์ง๋ ๋ชปํ ๊ฒ ๊ฐ์์ :3
Python 3.5์์ ์ด ๋ฒ๊ทธ๋ฅผ ๊ฒฝํํ์ง๋ง ๊ธฐ๋ณธ ์์ผ์ ๋น์ฐจ๋จ ๋ชจ๋๋ก ์ค์ ํ ๋๋ง(์: settimeout
). ์ด๊ฒ์ ์ค์ ๋ก Python 3: issue24291 ์ ์
์คํธ๋ฆผ ๋ฒ๊ทธ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ Python 3.6์์ ์์ ๋์์ต๋๋ค( issue26721 ์ฐธ์กฐ).
๋ค๋ฅธ ์น ์๋ฒ์์ ๊ตฌํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ wfile
๋ฅผ io.BufferedWriter
๋ก ๋ํํ๊ฑฐ๋(์: 3.5์ CPython wsgiref ) ๋ฒํผ๋ง์ ํ์ฑํํ๋๋ก wbufsize
๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์
๋๋ค. ๊ธฐ๋ณธ๊ฐ(์: ์ด gevent ๋ฌธ์ ์ฐธ์กฐ)
werkzeug๊ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ ๊ตฌํํ๊ณ ์ถ์ดํ๋์ง, ์๋๋ฉด werkzeug๊ฐ ์๋ ๋ฌธ์ ๋ก ๊ฐ์ฃผํ๋์ง ํ์คํ์ง ์์ต๋๋ค.
์ ๊ณต๋ ์ ๋ณด์ ๋ฐ๋ฅด๋ฉด ์ด๊ฒ์ด ์ค์ ๋ก gevent ๋ฒ๊ทธ ๋๋ stdlib ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํฉ๋๋ค. werkzeug๋ ๋ฒํผ๋ง๋ ํ์ผ์ ์ฐ๊ธฐ + ํ๋ฌ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ํญ์ ์๋ํด์ผ ํฉ๋๋ค. ์ด์ ์ด๊ฒ์ด ์ผ๋ฐ ํ์ด์ฌ์์๋ ๋ฐ์ํ๋์ง ์๋๋ฉด ๋ง ์ง๋ฒคํธ์
@RonnyPfannschmidt ์, gevent
์์ด๋ ์ป์ ์ ์์ต๋๋ค. werkzeug์ WSGIRequestHandler
์ ํจ๊ป ๋น์ฐจ๋จ ์์ผ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. Gevent๋ Python 3.5์ ์
์คํธ๋ฆผ ๋ฒ๊ทธ์ ์ํด ๊ฐ์ ์ ์ผ๋ก ์ํฅ์ ๋ฐ๋ ๋ง์ ํ๋ก์ ํธ์ ๋ ๋ค๋ฅธ ์์ผ ๋ฟ์
๋๋ค :-)
์ด๊ฒ์ด ๋ฐ์ํ๋ ์ํฉ๊ณผ Python 3.5์์ ์์ ๋์๋ค๋ ์ฌ์ค(3.4๋ 3์์ EOL๋จ)์ ๊ฐ์ํ ๋ ์ด ๊ธ์ ๋ซ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
Python 3.5์์ ์ด ๋ฒ๊ทธ๋ฅผ ๊ฒฝํํ์ง๋ง ๊ธฐ๋ณธ ์์ผ์ ๋น์ฐจ๋จ ๋ชจ๋๋ก ์ค์ ํ ๋๋ง(์:
settimeout
). ์ด๊ฒ์ ์ค์ ๋ก Python 3: issue24291 ์ ์ ์คํธ๋ฆผ ๋ฒ๊ทธ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. ์ด ๋ฌธ์ ๋ Python 3.6์์ ์์ ๋์์ต๋๋ค( issue26721 ์ฐธ์กฐ).๋ค๋ฅธ ์น ์๋ฒ์์ ๊ตฌํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์
wfile
๋ฅผio.BufferedWriter
๋ก ๋ํํ๊ฑฐ๋(์: 3.5์ CPython wsgiref ) ๋ฒํผ๋ง์ ํ์ฑํํ๋๋กwbufsize
๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ(์: ์ด gevent ๋ฌธ์ ์ฐธ์กฐ)werkzeug๊ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ๋ ๊ตฌํํ๊ณ ์ถ์ดํ๋์ง, ์๋๋ฉด werkzeug๊ฐ ์๋ ๋ฌธ์ ๋ก ๊ฐ์ฃผํ๋์ง ํ์คํ์ง ์์ต๋๋ค.