์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ PyCon์์ ๋ ผ์ํ ๊ฒ๋ค๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ฆ๋ค. R18๋ก ์์ ๋์ด ์์ต๋๋ค.
์ด์ ๋ํ ์ผ๋ถ ์ ๋ฐ์ดํธ:
ํ ๊ฒ:
์๋น์ค ์์/์ค์ง/์ฌ์์์ ์ฒ๋ฆฌํ์ฌ gunicorn์ ์ ์ฒด Windows ์๋น์ค๋ก ์ฌ์ฉํฉ๋๋ค. ์ ๋์ค์์ ์ ํธ ์ฌ์ฉ์ ์ด๋ป๊ฒ ๋ ๋์ฒดํ๊ณ ์์ต๋๋ค.
์ง์์ ๋ง์นจ๋ด R20์์ ์ด๋ฃจ์ด ์ง๋๋ค. ๋ค์ ์ฃผ์ ์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐ์ ์ถ์ ํ๊ธฐ ์ํด ์ PR์ ๋ง๋ค๊ฒ ์ต๋๋ค.
์์ ํ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
gunicorn์ ๋ํ Windows ์ง์ ์ถ๊ฐ์ ๋ํ ์งํ ์ํฉ์ ๋ฌด์์ ๋๊น? ์๋๋ฉด R20 ์์ ์ผ๋ง๋ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์ต๋๊น? #587๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋๋ฆฐ ์งํ. ์ด์ ์ค๋ ๋ ์์ ์ผ๋ก R19๋ฅผ ์ถ์ํ๊ณ ์ถ์ต๋๋ค. ์์์ผ์ ๋ฒ์ ์ ํธ์ํ๊ฒ ์ต๋๋ค. Windows ์ง์์ ์งํ์ ๋์ฐฉํฉ๋๋ค.
์ด Windows ์ง์ ๋ฒ์ ์ด ์ด๋๊ฐ์ ์์ต๋๊น?
Windows ์ง์์ R20์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก guincorn์ด Windows๋ฅผ ์ง์ํ๊ฒ ๋ ๋๊น์ง๋ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ ๊ฐ์ต๋๋ค... Ubuntu๋ก VM์ ๋ง๋ค์๊ณ ์ด๊ฒ์ด ์ ์๊ฒ ํจ๊ณผ์ ์ ๋๋ค.....
์งํ ์ํฉ์ด ๊ถ๊ธํฉ๋๋ค. ์ฒซ ๋ฒ์งธ ํจ์ค๋ก ๋น ๋ฅด์ง ์์๋ ๋ฉ๋๋ค. ํฐ ์ฅ์ ์ ๊ตฌ์ฑ์ ๋ณ๊ฒฝํ์ง ์๊ณ Windows์์ Gunicorn์ผ๋ก ๊ฐ๋ฐํ๊ณ Linux ์๋ฒ(์: Heroku)๋ก ํธ์ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
@robertlagrant ์ ํ ์ผ์ ๋๋ค. ๋จผ์ Windows ๋ผ์ด์ ์ค๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค. R20์ 10์์ ์ถ์๋ ์์ ์ด๋ฉฐ,
Modern.ie์ VM ์ด๋ฏธ์ง๋ ์ด๋ป์ต๋๊น? ๊ทธ๊ฒ๋ค์ ๋ฌด๋ฃ์ด๋ฉฐ ํฉ๋ฒ์ ์
๋๋ค.
2014๋
9์ 22์ผ ์คํ 3์ 30๋ถ์ "Benoit Chesneau" [email protected]์ด ์์ฑํ์ต๋๋ค.
@robertlagrant https://github.com/robertlagrant
์ฐ๋ง. ๋จผ์ Windows ๋ผ์ด์ ์ค๋ฅผ ์ฐพ์์ผ ํฉ๋๋ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/benoitc/gunicorn/issues/524#issuecomment -56372470.
๋๋ ์ต๊ทผ์ IE8์์ ์น ์ฑ์ ํ ์คํธํ๊ธฐ ์ํด modern.ie ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๊ฐ๊ธฐ ์ฝ๊ณ ํ๋ฅญํ๊ฒ ์๋ํ์ต๋๋ค.
@benoitc ํ์ํ ๊ฒฝ์ฐ PSF ์์ Windows ๋ผ์ด์ ์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
@benoitc ์ด์ ๋ํ WIP ๋ถ๊ธฐ๊ฐ ์์ต๋๊น? ๋๋ Windows ์ฌ์ฉ์๊ฐ ์๋์ง๋ง ์ด๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
@berkerpeksag ์์ง ์๋๋๋ค :/ ์ ๋ง ๋นจ๋ฆฌ ์์ํด์ผ ํฉ๋๋ค.
@cyberdelia ๋ PSF์์ gunicorn ํ๋ก์ ํธ๊ฐ ์ด๋ฌํ ๊ฐ๋ฐ์ ์ฌ์ฉํ ์ ์๋ Windows ๋ผ์ด์ ์ค๋ฅผ ์์ฒญํ ์ ์๋ค๊ณ ๋งํ์ต๋๋ค. ์๊ฐ?
์ข์ ์๊ฐ์ด์ผ. https://www.python.org/psf/grants/ ์๋ ๋ณด์กฐ๊ธ ์ ์์ ๋ํ ๋ชจ๋ ์ ๋ณด๊ฐ ์์ต๋๋ค.
์ด์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋๋ ๋ํ ์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์ฐพ๊ณ ์์ต๋๋ค.
@berkerpeksag IRC์์ ์ต๋ํ ๋นจ๋ฆฌ ์ด์ผ๊ธฐ๋ฅผ ํฉ์๋ค. ๋๋๋ค. :)
@benoitc ์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
@lealhugui ๋ด๊ฐ ์๋ ํ ๊ทธ ์ดํ๋ก ์ง์ ์ด ์์์ต๋๋ค. ์ด์จ๋ ๋๋ ๊ณํ์ ์ธ์ ๋ค.
๊ฐ๋ 3์์ ๋ฐ๋งค๋ฅผ ๊ธฐ๋ํด๋ ๋ฉ๋๋ค. ๋ ๋นจ๋ฆฌ ํ ์ โโ์์ง๋ง ์ฝ์์ ์์ต๋๋ค :) ์ค์ ๋ก ๋๋ณด๋ค ์ฐฝ์ ๋ ์ ์๋ ์ฌ๋(ํํธ 1995๋ ์ดํ๋ก ์ฐฝ์ ์ฌ์ฉํ์ง ์์์ต๋๋ค...)์ด ๋์์ ์ค ์ ์๋ค๋ฉด ์์ ์ด ๋ ๋นจ๋ฆฌ ์งํ๋ ์ ์์ต๋๋ค!
@benoitc 1์ ์ค์ ์ดํ์ ์ ๊ฐ ๋์ธ ์ ์๋ ๋ชจ๋ ๊ฒ).
@lealhugui ๊ฐ์ฌํฉ๋๋ค! ์ต๋ํ ๋นจ๋ฆฌ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๊ฒ ์ต๋๋ค.
์ผ์ด ์ ์งํ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. 3์์ ์ถ์๋ ์ด ๋ฆด๋ฆฌ์ค๊ฐ ์ฌ์ ํ ๊ด์ฐฎ์ต๋๊น?
@tannaalok ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ต๋๋ค. @benoitc ๊ฐ IPC ์์ ์ ๊ฒ์ํ๊ณ Windows ์ง์์ด ๊ฐ๋ฅํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. IPC ์์ ์ด ์์๋๊ณ ๋๋จธ์ง Windows ์์ ์ด ๊ฒ์, ๋ถ๋ฅ, ์์ ๋๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๋งํ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต์ต๋๋ค.
@tilgovi IPC ์์ ์ ๋๋๋ก ๋ค์ ์ฃผ์ ์ง์ ์ ๋์ฐฉํฉ๋๋ค :)
์ด์ Windows ๋ฒ์ ์ ๋ํด ์๊ฐํ๊ณ ์๋ ๊ณํ์ด ์์ต๋๋ค. ๊ฐ์ฅ ๋จผ์ ํ ์ผ์ Gunicorn์ Windows CI์ ์ฐ๊ฒฐ ํ์ฌ ๋ฌธ์ ๋ฅผ ๊ธฐ๋กํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ cygwin์์ gunicorn์ ์คํํ๊ฑฐ๋ ์ผ๋ฐ ์ฐฝ์์ gunicorn์ ์คํํ๋ ๋ ๊ฐ์ง ์๋๋ฆฌ์ค๊ฐ ์์ต๋๋ค. ๋์ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฐํ ์ ์์ผ๋ฉฐ ํ ์คํธ๊ฐ ํ์ํฉ๋๋ค. ๋ด๊ฐ ์๋ ํ gunicorn์ ํด๋์ฉ์ผ๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ด๊ฐ ๋์น ๊ฒ ์๋? ์ด๋ค ๋์์ด๋ ํ์ํฉ๋๋ค. ์ ๋ Windows ์ผ์ผ ์ฌ์ฉ์๊ฐ ์๋๋๋ค. ๋ฐ๋ผ์ Windows ํ๋ซํผ์ gunicorn์ ์ฒซ ๋ฒ์งธ ์๋ฏผ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด ๊ทธ ๋ถ๋ถ์ ์ฃผ๋ํ๊ณ ์ถ์ Windows ๊ฒฝํ์ด ์๋ ์ฌ๋์ ๋๊ตฌ๋ ํ์ํฉ๋๋ค!
Python 3.5๋ Windows์์ ์ ํธ๋ฅผ ์ฒ๋ฆฌํ๋ ์ ์ฉํ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค. signal.set_wakeup_fd()๋ ์ด์ Windows์์ ์์ผ ํธ๋ค์ ํ์ฉํฉ๋๋ค.
https://docs.python.org/dev/library/signal.html#signal.set_wakeup_fd
@cyberdelia ๊ฐ PSF์์ Windows ๋ผ์ด์ ์ค๋ฅผ ์์ฒญํ ์ ์๋ค๊ณ ๋งํ ๊ฒ์ฒ๋ผ
Microsoft๋ Python ํต์ฌ ๊ฐ๋ฐ์์๊ฒ ๋ฌด๋ฃ MSDN ๋ผ์ด์ ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ ๋ ํต์ฌ ๊ฐ๋ฐ์๋ก์ Visual Studio 2015์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
@haypo ๊ฐ์ฌํฉ๋๋ค. ์ค์ ๋ก ์ ๋์ค์์๋ ์ค์ฌ์๋ฅผ ๊นจ์ฐ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
ํต์ฌ ๊ฐ๋ฐ์๊ฐ ๋์์ด ๋ ์ ์๋ค๋ฉด ์ ์ฉํ ๊ฒ์ ๋๋ค. ์ธ๋ถ ํ๋ก์ ํธ์ผ ๋ ์์ฒญํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น?
Windows ๊ธฐ๋ฅ์ ๋์์ผ๋ก ํ๋ WSL(Linux ์ฉ Windows)๋ ์์ต๋๋ค.
์ ํ๋ Linux ๋ฐ gunicorn ์ง์์ ๊ฐ์ง ์ฌ๋์ด ์ด๊ฒ์ Windows๋ก ์ด์ํ๋ ๋ฐ ๋์์ด ๋ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์๋๋ฉด ๋ฌธ์ ๊ฐ ๋๋ฌด ์ฌ์ํ์ง ์์ต๋๊น?
์ด ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? Windows ์์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์ด ๋ฌธ์ ๋ ์์ง ์ด๋ ค ์์ต๋๋ค.
@DominikDitoIvosevic ์์ง ์ด๋ ค ์์ต๋๋ค. ๋๋ ์ด๋ฒ ์ฃผ์ ๋๋๋ก ์ผ์ข ์ ๋ก๋๋งต์ ์ ๊ณตํ ๊ฒ์ ๋๋ค.
๋๋ ์ค๋ ์ฝ๊ฐ์ ํธํ์ฑ ๋
์๋ฅผ ์ฐ์ฐํ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋๋ #1310์์ ๋ด ์ํ์ ๋ณด๊ณ ์์๋ค. FD_CLOEXEC๋ฅผ systemd C ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค๋ฅด๊ฒ ์ฒ๋ฆฌํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋๋ฅผ PEP 446์ผ๋ก ์ด๋๊ณ fork
ํ๋์ ๋ํด ์๊ฐํ๊ณ Windows์๋ fork
๊ฐ ์๋ค๋ ๊ฒ์ ๊ธฐ์ตํฉ๋๋ค.
์ผ์ ์์ํ๊ธฐ ์ํด ๋ก๋๋งต์ ํ์ํ ๋ช ๊ฐ์ง ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
os.fork
๋ฅผ multiprocessing.Process
๋ฐ๊ฟ๋๋ค.WorkerTemp
๋ฅผ multiprocessing.Pipe
๋ฐ๊พธ๊ธฐ์ง์ฅ์์ Windows๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ง ๋์์ด ๋ ๊ฒ์ ๋๋ค. ์ด ๊ธฐ๋ฅ์ด ๋งค์ฐ ๊ธฐ๋๋ฉ๋๋ค!
๋๋ ์ด๊ฒ์ด ๋ต์ด ์๋ ์๋ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง, ๋๋ ์จ์ดํธ๋ฆฌ์ค๊ฐ
์๋์ฐ.
2016-08-08 22:39 GMT+03:00 hirolau [email protected] :
์ง์ฅ์์ Windows๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ง ๋์์ด ๋ ๊ฒ์ ๋๋ค. ๋์ ๊ธฐ๋
์ด ๊ธฐ๋ฅ!โ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/benoitc/gunicorn/issues/524#issuecomment -238351654,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AALnfBAXBrmPlU1JPx6RXI0vFQPLmBlyks5qd4XhgaJpZM4AnyCw
.
์ถฉ์คํ,
๊ธ๋
@chester89 ์ด๊ฒ์ ํ์คํ ๊ฑฐ๊ธฐ์ ์ ํฉํ์ง ์์ต๋๋ค....
@hirolau ์ ๋ ์ง๋ ๋ฌ์ MSDN ๊ฐ๋ฐ์ ๋ผ์ด์ ์ค๋ฅผ ์ป์์ผ๋ฏ๋ก Windows์์ ์ฝ๊ฒ ํ ์คํธํ ์ ์์ต๋๋ค. @berkerpeksag ๊ฐ ํ ์คํธ์ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ณํ์์ ์์ฑํด์ ๋ค์๋ฌ์ ๊ฐ๋ ์ฌ๋ฆฌ๋๋ก ํ๊ฒ ์ต๋๋ค :)
@benoitc - ๋ป๋ปํ ๋ฒํ!
๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ฐฝ์ ์ฌ์ฉํ๋ฏ๋ก ์ฐฝ์์ gunicorn ์์
์ ๋งค์ฐ ๊ฐ์ฌํ ๊ฒ์
๋๋ค. ๊ฐ์ฌ ํด์ !
์ธ์ ์ค๋นํ ๊ณํ์ด ์์ต๋๊น?
์ด๊ฒ์ ๋ํ ์์์ด ์์ต๋๊น? ์ฐ๋ฆฌ๋ ํ๋ก๋์ ์์ Windows๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์์ ์ด ์ค๋จ๋ ๊ฒฝ์ฐ ์ด์ ๊ณํ์ ๊ณต์ ํ ์ ์์ต๋๊น? ๊ฑด๋ฐฐ!
@cmorgan ์ฌ๊ธฐ๋ ๊ฐ์ ์ํฉ์ ๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์๋ ์ฌ๋์ด ์์ต๋๊น?
@benoitc ์ด์ ๋ํ ์์์ด ์์ต๋๊น?
์ฌ๋ฌ๋ถ, ์๋
ํ์ธ์
์ด๊ฒ์ ๋ํ ์์์ด ์์ต๋๊น?
๋ฌธ์ ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์ถ๊ฐ๋ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. ์ ๋ฐ์ดํธ๋ฅผ ์์ฒญํ ํ์๊ฐ ์์ต๋๋ค.
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ,
์ ์ ๋ต๋ณ์ ๋๋ฆฌ์ง ๋ชปํด ์ฃ์กํฉ๋๋ค. ์์ฆ ๋ง์ด ๋ฐ๋นด์ด์. ๊ทธ๋์ ๋ง์ ์ฌ๋๋ค์ด ์ด ๊ธฐ๋ฅ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด์ ๊ณง ๋ง๋ค ๋๊ฐ ๋์์ต๋๋ค. II๋ ๊ทธ๊ฒ์ ๋ํ ๊ณํ์ ์ผ์์ผ๊น์ง ์ด์์ ์์ฑํ๊ณ ๊ทธ๊ฒ์ ์คํํ ๋ฐฉ๋ฒ์ ์ฐพ์ ๊ฒ์ ๋๋ค :)
๋๋ ์ด๊ฒ์ ๋ ์๊ณ ์คํ ๊ฐ๋ฅํ ์์ ์ผ๋ก ๋๋๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ๋ผ์ AppVeyor ๊ตฌ์ฑ์ ์ถ๊ฐํ๊ธฐ ์ํด PR #1468๊ณผ ํจ๊ป "set up CI" ๋ถ๋ถ์ ๋ํด #1467์ ์ ์ถํ์ต๋๋ค. ์์ ํ
์คํธ ์คํ์ ์ฌ๊ธฐ์์ ๋ณผ ์ ์์ต๋๋ค.
https://ci.appveyor.com/project/edmorley/gunicorn/build/windows-ci.18
์ด์ ์๊ฒฌ์์ ์ธ๊ธํ ๋ ํฐ ๋ณ๊ฒฝ ์ฌํญ(์ ํธ, ์์ ์ IPC, ํฌํฌ ๋ถ์กฑ ์ฒ๋ฆฌ ๋ฑ) ์ธ์๋ ํ ์คํธ๊ฐ ์ ํ ์คํ๋๊ธฐ ์ ์ ๋ค์์ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
ImportError: No module named fcntl
( fcntl.fcntl() ์ close_on_exec() ๋ฐ set_non_blocking() ์์ ์ฌ์ฉ๋จ )ImportError: No module named grp
( grp.getgrnam() ์ validate_group() ์์ ์ฌ์ฉ๋จ)ImportError: No module named pwd
( pwd.getpwnam() ์ validate_user()์ ์ํด ์ฌ์ฉ๋จ)ImportError: No module named resource
( resource.getrlimit() ์ get_maxfd() ์ ์ํด ์ฌ์ฉ๋์ง๋ง, ๊ทธ ๋ฉ์๋๋ ์ฌ์ฉ๋์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค - ์ ๊ฑฐํ๊ธฐ ์ํด #1469๋ฅผ ์ด์์ต๋๋ค)AttributeError: 'module' object has no attribute 'AF_UNIX'
( UnixSocket ์ FAMILY
ํด๋์ค ์์ฑ์์ ์ฌ์ฉ๋จ )AttributeError: 'module' object has no attribute 'geteuid'
( os.geteuid() ๋ ์ฌ์ฉ์ ์ค์ ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ๋จ)AttributeError: 'module' object has no attribute 'getegid'
( os.getegid() ๋ ๊ทธ๋ฃน ์ค์ ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉ๋จ)@edmorley ๊ฐ์ฌํฉ๋๋ค ์ต๋ํ ๋นจ๋ฆฌ ๋ณด๊ฒ ์ต๋๋ค :)
์ด ๊ธฐ๋ฅ์ ์ธ์ ์กด์คํ ์ ์๋์? ์ด ๋ฌธ์ ๋ ์ฝ 4๋ ์ ์ ์์๋์์ต๋๋ค.ใ
์๋
ํ์ธ์,
์ฐ๋ฆฌ๋ ์ด ๊ธฐ๋ฅ๋ ๊ฐ๊ธฐ๋ฅผ ์ํฉ๋๋ค. ์ธ์ ์ด๋ฐ ์ผ์ด ์์๋ ์ง ์ ์ ์์ต๋๊น?
์๋ ํ์ธ์ ์ด๊ฑฐ ์ธ์ ์ฒ๋ฆฌ๋๋์? :)
๋๊ตฌ๋ ์ง ๋๊ณ ์ถ๋ค๋ฉด @edmorley ๊ฐ ๋ฐ๊ฒฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ์ ์ฉํ PR์ด ๋ ๊ฒ์ ๋๋ค.
์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํด ์ผ๋ถ ํญ๋ชฉ์ด ๋ ๊ทน์ ์ผ๋ก ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
ํ์ฌ๋ก์๋ ์ด์ ๋ํ ํ์๋ผ์ธ์ด ์์ต๋๋ค. ๋์์ ์ฃผ๊ณ ์ถ๋ค๋ฉด IRC๊ฐ ์ด์ ๋ํด ์ฑํ ํ๊ฑฐ๋ ๊ฐ๋ณ ์์ ํญ๋ชฉ์ ๋ํ ์์ ๋ฌธ์ ๋ฅผ ์ฌ๋ ๊ฐ์ฅ ์ข์ ์ฅ์๊ฐ ๋ ์ ์์ต๋๋ค.
์งํ ์ํฉ์ ๋ํ ์๋ฆผ์ ๋ฐ์ผ๋ ค๋ฉด ์ด ํธ๋ฅผ ๊ตฌ๋ ํ์ญ์์ค. ์ง๊ธ์ ํ์๋ผ์ธ์ด ์์ต๋๋ค.
FWIW, Gunicorn์ Windows์ Cygwin์์ ์๋ํฉ๋๋ค. ๋ณ๋ก ๋์์ด ๋์ง ์๋๋ค๋ ๊ฑด ์์ง๋ง...
@Zorlin Windows์์ Cygwin๊ณผ ํจ๊ป ์๋ํ๋๋ก ํ ์ ์์ต๋๋ค. ๊ณต์ ๋ฌธ์ ์์ ์์ ๋ฅผ ์๋ํ์ต๋๋ค.
$ pip install gunicorn
$ cat myapp.py
def app(environ, start_response):
data = b"Hello, World!\n"
start_response("200 OK", [
("Content-Type", "text/plain"),
("Content-Length", str(len(data)))
])
return iter([data])
$ gunicorn -w 4 myapp:app
Cygwin์์ ์ด ์ค๋ฅ๊ฐ ๊ณ์ ๋ฐ์ํฉ๋๋ค.
<project-name>\flask\lib\site-packages\gunicorn\util.py", line 9, in <module>
import fcntl
ModuleNotFoundError: No module named 'fcntl'
์ด๊ฒ์ Windows 10์ ํ์ ์์คํ ์์๋ ์คํ๋๋ฏ๋ก ๋ ์ด์ ํ์ํ์ง ์์ ์ ์์ต๋๊น?
๊ธฐ๋ณธ์ ์ผ๋ก ์ฐฝ์ ์ง์ํ๋ ค๋ฉด ๋ค์์ด ํ์ํฉ๋๋ค.
CreateProcessW
๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ธ์ค๋ฅผ ์์ฑํฉ๋๋ค(๋ค์ค ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ _winapi ์ถ์ํ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๊น?(๋ค์ค ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ _winapi ์ถ์ํ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ต๋๊น?
BTW, ์ฌ์ฉ์ ๋ฉํฐ ํ๋ก์ธ์ฑ CreateProcess
์ popen_spawn_win32.py
ํ๊ณ ๋ด๋ถ ๋ชจ๋์ด๊ธฐ ๋๋ฌธ์ ํ์ด์ฌ์ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ๊ณผ์ ์ ์ผ๋ถ๊ฐ ์๋๋ค.
์ฌ๋ฌ๋ถ, ์๋ ํ์ธ์! ์ด ๋ฌธ์ ์ ๋ํ ์งํ ์ํฉ์ ์ด๋ป์ต๋๊น? ์๋ฃ๋ฅผ ์ํ ๋ชฉํ ๋ ์ง๊ฐ ์์ต๋๊น? ๊ฐ์ฌ ํด์!
@bartmika ์๋. ๋์ ๋ ์ง๊ฐ ์์ต๋๋ค. Benoitc๊ฐ ์ค๋ช ํ๋ฏ์ด ์ฐ๋ฆฌ๋ ํด์ผ ํ ์ผ์ด ๋ง์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋์์ ํ์ํฉ๋๋ค. ์์์ ๋งํ๋ฏ์ด ์ ๋ฐ์ดํธ๋ฅผ ์ํด ์ด ํธ๋ฅผ ๊ตฌ๋ ํ์ญ์์ค. ๊ณต์ ํ ๋ด์ฉ์ด ์์ผ๋ฉด ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค.
@tilgovi๋ , ๊ฐ์ฌํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ข ๊ฒฐํ๋ ๋ฐ ์ ์ฌ์ ์ผ๋ก ํ์๊ธ์ ๊ฑธ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ผ์ํ๊ณ ์ถ์ต๋๋ค. Gunicorn์ ๊ฐ๋ฐ์๋ bart [ at ] simalam.com์ผ๋ก ์ ์๊ฒ ์ฐ๋ฝํด ์ฃผ์ญ์์ค.
๊ฐ์ฌํฉ๋๋ค!
@bartmika ์ฃ์กํฉ๋๋ค ๋ฐ์ ํ ์ฃผ์์ต๋๋ค. @tilgovi & @berkerpeksag ์ ์ฐ๋ฝ์ด ๋ฟ๋ ๋๋ก ๋ด์ผ ์ฐ๋ฝ ๋๋ฆฌ๊ฒ ์ต๋๋ค . ์ด์จ๋ ์ข์ ์๊ฐ์ ๋๋ค.
@benoitc ๋ Windows์ฉ Gunicorn์ ์ํ๋ฅผ ํ์ธํ๊ณ ์ถ์์ต๋๋ค. ์์ง ์ถ์ ๋ ์ง๋ ์์ง๋ง Windows์์ ํ ์คํธํ ์ ์๋ ๋ฒ ํ๊ฐ ์๋์ง ํ์ธํ๊ณ ์ถ์์ต๋๋ค.
@jmaulsby ์์ ์ ์์ง ์ค์ ๋ก ์์๋์ง ์์์ต๋๋ค. ์ฒ์ฒํ ๋ค์ ์์ํ๊ฒ ์ต๋๋ค. ์ ๋ฅผ ์ํ ๊ณํ์ Windows ์ง์์ ํฌํจํ์ฌ 12์์ ๋๋๋ก ๋ค์ ์ฃผ์ ๋ฆด๋ฆฌ์ค๊ฐ ์ด๋ฃจ์ด์ง๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
@bartmika ์์ฆ ๊ณ๊ธธ๋ก ๋น ์ ธ๋ค๊ณ ์์ต๋๋ค. ์ด๋ฒ ์ฃผ ํ๋ฐ์ ๊ณต๊ฐํ ๊ณํ์ ์ธ์ฐ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค.
์ด์ Windows์ ๋ํ ์ง์์ด ์์ต๋๊น? 12์์ด๋ค
๊ธฐ๋๋ฉ๋๋ค! 1์์ด๋ค.
@benoitc ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
์๋ ํ์ธ์,
๋ฐฉ๊ธ ๋ค์ ํ์ธํ๋๋ฐ ์๋ก์ด ๊ฒ์ด ์์ต๋๊น?
๊ฐ์ฌ ํด์
๋ง์ดํฌ
์๋ ํ์ธ์
์ง๊ธ Windows์์ Apache Airflow๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
๊ฐ์ฌ ํด์
์๋ค์นด๋ฅด
์๋ ํ์ธ์,
๋ค์ ๋ช ๋ น์ ์๋ํ๊ณ ์์ง๋ง ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋น์ ์ ์ด๊ฒ์ ๋ํด ๋์ธ ์ ์์ต๋๊น?
(flaskms) C:\Users\Socrates>gunicorn --bind 0.0.0.0:8000 hello-world:app
Traceback (most recent call last):
File "c:\programdata\anaconda3\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "c:\programdata\anaconda3\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "C:\ProgramData\Anaconda3\Scripts\gunicorn.exe\__main__.py", line 5, in <module>
File "c:\programdata\anaconda3\lib\site-packages\gunicorn\app\wsgiapp.py", line 10, in <module>
from gunicorn.app.base import Application
File "c:\programdata\anaconda3\lib\site-packages\gunicorn\app\base.py", line 12, in <module>
from gunicorn import util
File "c:\programdata\anaconda3\lib\site-packages\gunicorn\util.py", line 9, in <module>
import fcntl
ModuleNotFoundError: No module named 'fcntl'
ํดํน, ๋๋ ์ฐฝ์กฐ fcntl.py
, ์๋์ ๋ด์ฉ์ผ๋ก ํ์ผ๋ก ์ปดํ์ผ fcntl.cpython-36.pyc
ํ์ผ ์๋์ ๋ฐฐ์น __pycache__
ํฐ๋ฏธ๋์ ๋ค์ ์์, ํด๋ ๋ฐ ๋ช
๋ น ์คํ gunicorn --bind 0.0.0.0:8000 hello-world:app
ํ์ง๋ง ์ฌ์ ํ ์ด์ด ์์ต๋๋ค.
fcntl.py ์ฝํ ์ธ :
FD_CLOEXEC = 1
F_DUPFD = 0
F_GETFD = 1
F_SETFD = 2
F_GETFL = 3
F_SETFL = 4
F_GETOWN = 5
F_SETOWN = 6
F_GETLK = 7
F_SETLK = 8
F_SETLKW = 9
F_RGETLK = 10
F_RSETLK = 11
F_CNVT = 12
F_RSETLKW = 13
F_RDLCK = 1
F_WRLCK = 2
F_UNLCK = 3
F_UNLKSYS = 4
def fcntl(fd, op, arg=0):
return 0
def ioctl(fd, op, arg=0, mutable_flag=True):
if mutable_flag:
return 0
else:
return ""
def flock(fd, op):
return
def lockf(fd, operation, length=0, start=0, whence=0):
return
https://stackoverflow.com/questions/11087682/does-gunicorn-run-on-windows ์์ ๊ฐ์ ธ์์ต๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ๋น๋ถ๊ฐ Windows์ฉ ์ต๊ณ ์ Gunicorn ๋์์ ์ ์ํ ์ ์๋ค๋ฉด ๋์์ด ๋ ๊น์?
์ ๋ฐ์ดํธ: ์ ๋ ์ง๊ธ ์จ์ดํธ๋ฆฌ์ค๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์์ฃผ ์ข์ ๋์์ ๋๋ค. :)
5๋ ์ด ์ง๋ฌ๋๋ฐ ์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? ๊ฐ์ฌ ํด์.
@hsluoyz ๊ณต๊ฐ์ ์ผ๋ก ์ผ์ด๋ ๋ง์ง๋ง ์ผ์ ์ฌํด 3์ 16์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋
ํ์ธ์,
์์ง Windows์์ ํฌํฌ๊ฐ ์๋ํ๋๋ก ํ๋ ๋ฐ ์ด์ด ์์ต๋๊น?
์๋ ํ์ธ์,
์ด ํฐ์ผ ์์
์ ๊ด์ฌ์ด ์์ต๋๋ค.
ํญ๊ตฌ์ ํ์ฌ ์ํ๋ ๋ฌด์์
๋๊น?
ํญ๊ตฌ์ ํ์ฌ ์ํ๋ ๋ฌด์์ ๋๊น?
PR #1468์ Windows์ AppVeyor์ ๋ํ ํ ์คํธ๋ฅผ ์ถ๊ฐํ 1๋ ์ ์ ๋ณํฉ๋์์ง๋ง AppVeyor ๊ณ์ ์ด ์คํ๋๊ธฐ ์ ์ ํ์ฑํํด์ผ ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋๊ตฐ๊ฐ๋ Windows ํ ์คํธ ์คํ์์ ๋ฐ์ํ๋ ์คํจ๋ฅผ ๋ฐ๋ณตํด์ผ ํฉ๋๋ค.
@edmorley ์ค๋์ ์ฑ๋ฒ ์ด์ด๋ฅผ ๋งก๊ฒ ์ต๋๋ค.
@Sweepet ์์ง ๋ง์ด ์์ต๋๋ค. ๊ฐ์ฅ ๋จผ์ ํ ์ผ์ ํ ์คํธ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ๊ทธ ๊ฒฐ๊ณผ์์ ํฐ์ผ์ ๋ง๋๋ ๊ฒ์ ๋๋ค.
๋ํ ๋ฒ์๋ฅผ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
์ํ๋ค๋ฉด ๋ด์ผ IRC๋ฅผ ํตํด ๊ฐ๋ ๋ ผ์ํ ๊ฒ์ ์ ์ํฉ๋๋ค.
์ ์ฅ์์ appveyor๋ฅผ ์ค์นํ์ต๋๋ค.
@benoitc , Ubuntu 18.04 ๋ฐ Python 3.6.5์ ๋ํ ์์ฉ ํ๋ก๊ทธ๋จ(examples/flaskapp.py)๊ณผ WSL์์ ์คํ๋๋ ๋ชจ๋ ํ ์คํธ๊ฐ ์์ต๋๋ค. ์๋ง๋ tox ํ์ผ์ ์ง์ ๋ ๋ค๋ฅธ ๋ชจ๋ ๋ฒ์ ์์ ์๋ํด์ผ ํฉ๋๋ค. WSL์์ ์คํ๋๋ค๋ ์ฌ์ค์ Windows 10์์ ์คํ๋์ง ์๋ ํ ๋๋ถ๋ถ์ Windows ์ฌ์ฉ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ฒ์ ๋๋ค. Cygwin์ด ์ฌ์ ํ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๊น?
๋ด์ผ Windows์ ๊ธฐ๋ณธ ์ง์์ ๋ํด ๋ ผ์ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ์๊ฐ์ ๋ช์์ ๋๊น?
๋ด์ผ๋ ํด๋น ํฐ์ผ์ ์์ฑํ ์์ ์ด๋ฉฐ ์ฃผ๋ก ๊ธฐ๋ณธ Linux ๋ชจ๋ ๋ฐ ์์ผ์ ์ค์ฌ์ผ๋ก ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
FWIW, Windows์์ cygwin์ ์ฌ์ฉํฉ๋๋ค.
Python์ด Windows์์ ์ ๋๋ก ์คํ๋์ง ์๋ ๊ฒฝ์ฐ(์: psycopg2, weasyprint ๋ฑ), ์ Python์ ์ฌ์ ํ โโํฌ๋ก์ค ํ๋ซํผ์ด๋ผ๊ณ ์ฃผ์ฅํฉ๋๊น? ์ง๊ธ๊น์ง๋ Windows 10์์๋ ์ ๋๋ก ์คํ๋์ง ์์ต๋๋ค.
@jtan4nih ๊ทธ๋ฐ ํ๋๋
Python์ ํฌ๋ก์ค ํ๋ซํผ์ด์ง๋ง gunicorn์ ๊ทธ๋ ์ง ์์ต๋๋ค.
์ฃ์กํฉ๋๋ค. ๋์ฐํ๊ฒ ์์ผ๋ก ์ถ์ ๋์์ต๋๋ค. Windows์์ ๊ธฐ๋ณธ์ ์ผ๋ก gunicorn์ ์คํํ๊ณ ์ถ์ ์ฌ๋์ด ์์ผ๋ฉด ์ด๋ค ํจ์น๋ ์๋ฝํ๊ณ ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
cs01/gdbgui#18์ ์ฐธ์กฐํ์ญ์์ค. ๋์์ด ๋ ์ ์์ต๋๋ค.
7๋ ์ด ํ๋ ๋๋ฐ ์ด์ด ๋ฐ๋ผ์ฌ๊น์?
๋๋ 3์ ๋์์ ์ฝ๊ฐ์ ์ฃผ๊ธฐ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค. ๋๋ ์ฐพ์์ผ ํ ๊ฒ์ด๋ค
์ด๋๊ฐ์์ ์ฐฝ์ ์คํํ๋ ๋ฐฉ๋ฒ. ์ด๋ฏธ ํฐ๋ฏธ๋์์ ์คํํ ์ ์์ต๋๋ค
๊ทธ๋๋.
๋ํ ์ค์ ๋ก ์ฐฝ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ฌ๋์ด ํด๋น ์ฃผ์ ์ ๋ํด ๋์์ ์ค ์ ์์ต๋๋ค.
waitress
์๋ํ์ญ์์ค.
gunicorn
์ ๋์์ธ์ Unix ๋ฐ Unix ๊ณ์ด ์ปค๋์ ํ์ฉํ์ฌ ์น ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์
๋๋ค.
gunicorn์ ์ฌ์ฉํ์ฌ heroku์ django๋ฅผ ๋ฐฐํฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ youtube ์์ต์๋ฅผ ๋ณด๋ฉด ์ ๋ง ๊ทธ๋ค์ด ์ด๋ป๊ฒ ๊ทธ๋ ๊ฒ ํ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ํํธ ๋๋ ์ฌ์ ํ gunicorn ๋ฌธ์ ๊ฐ ์์ต๋๋ค lol
waitress
์๋ํ์ญ์์ค.
gunicorn
์ ๋์์ธ์ Unix ๋ฐ Unix ๊ณ์ด ์ปค๋์ ํ์ฉํ์ฌ ์น ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒ์ ๋๋ค.
์จ์ดํธ๋ฆฌ์ค๊ฐ ์ ์ ํ ๋ค์ค ์ฒ๋ฆฌ๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
์ ์ ํ ๋ค์ค ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๊ธฐ ์ํด Windows์์ ์ํํ ์ ์๋ ๋๋ต์ ์ธ ์์ด๋์ด๊ฐ ์์ต๋๊น?
์ด๊ฒ์ด ๊ตฌํ๋๋ ๋ฐ ์์ด ์ง๊ธ๊น์ง ์ฃผ์ ์ฅ์ ๋ฌผ์ด ๋ฌด์์ธ์ง ์๊ณ ์์ต๋๊น?
๋๋ 3์ ๋์์ ์ฝ๊ฐ์ ์ฃผ๊ธฐ๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค. ์ด๋๊ฐ์์ ์๋์ฐ๋ฅผ ์คํํ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ํ ๊ฒ์ ๋๋ค. ์ด์จ๋ ํฐ๋ฏธ๋์์ ์ด๋ฏธ ์คํํ ์ ์์ต๋๋ค.
Win10 dev VM์ด Windows๋ฅผ ์คํํ๊ณ gunicorn ํธํ์ฑ์ ํ์ธํ๊ธฐ ์ํ ์๋ฃจ์
์๋ง๋ ์ฐ๋ฆฌ๋ fnctl
๋์ pywin32
๋ฅผ windows์ฉ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ผ ์ ๊ธ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@jtan4nih ๊ทธ๋ฐ ํ๋๋
Python์ ํฌ๋ก์ค ํ๋ซํผ์ด์ง๋ง gunicorn์ ๊ทธ๋ ์ง ์์ต๋๋ค.