์๋ก
ํํ๊ฒ nonblocking-asyncํ ๋์์ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ฉํฐ์ฐ๋ ๋ฉ/๋ฉํฐํ๋ก์ธ์ฑ ๊ณผ ๊ฐ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
ํ์ง๋ง python์์๋ Global Interpreter Lock ์ด๋ผ๋ ๋์ผ ์์ ์ ํ๋์ ์ค๋ ๋๋ง ์ฌ์ฉํ๋๋ก ํ๋ ์ธํฐํ๋ฆฌํ ๊ธฐ๋ฒ์ด ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ๋ฉํฐ์ค๋ ๋ฉ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋์์ ๊ธฐ๋ํ๊ธฐ ํ๋ค๋ค.
๊ทธ๋ฌ๋ฏ๋ก ํ์ด์ฌ ๊ณต์ ํํ์ด์ง์์๋ ๋ฉํฐํ๋ก์ธ์ฑ์ ์ฌ์ฉํด ๋น๋๊ธฐ์ ์ธ ์๋์ ํ๋๋ก ํ๋ ๊ฒ์ ์ถ์ฒํ๋ค.
ํ์ง๋ง ํ๋ก์ธ์ค๋ ์ค๋ ๋์ ๋ฌ๋ฆฌ ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ๊ฒ๋๋ฏ๋ก, ๊ณต์ ์์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋๊ด์ ๋ด์ฐฉํ๋ค.
๋ชฐ๋ผ์ ๊ทธ๋ฅ ๋ฉํฐ์ค๋ ๋ฉ์ผ๋ก ์์ ํ๋๋ฐ ์๊ณ ๋ณด๋๊น Manager๋ผ๋ ๊ฐ์ฒด๋ก ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ํ๋ค.
Manager์ ์ฌ์ฉ๋ฒ์ ๊ณต์ ํํ์ด์ง์ ๊ฐ๋ฉด ์ ์๋ ค์ฃผ๋๊น ์์ ํ์ง ์๊ณ , ์ด๋ฅผ ์ฌ์ฉํด์ ํด๊ฒฐํ ๋ฌธ์ ๋ค์ ์ ์ด๋ณธ๋ค.
๋ฌธ์ 1
ํ๋ก์ธ์ค๊ฐ Queue๋ฅผ ํตํด ์ ๋ณด๋ฅผ ๊ณต์ ํ ๊ฒฝ์ฐ ์๊ธธ ์ ์๋ ๋ฌธ์ .
๋ถ๋ชจ ํ๋ก์ธ์ค์์ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ณ , Queue๋ฅผ ํตํด์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ณ ๋ฐ๋ ๊ณผ์ ์์ ์๊ธธ ์ ์๋ ๋ฌธ์ ์ด๋ค.
Master process์์ worker process๋ฅผ ์์ฑํ๊ณ , ๊ทธ worker process์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค ์ข ๋ฃ ์กฐ๊ฑด์ด ์๊ธธ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ ๋ช ๋ น์ด๋ก worker process๋ฅผ ์ข ๋ฃํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
ํ์ง๋ง ๊ทธ๋ ๊ฒ ๋๋ฉด DeadLock์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๊ธด๋ค.
Python์์์ Queue๋ Pipe์ Lock์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ์์ ๋ ๋๋ก ๋ฒํผ๋ง๋ ๋ชจ๋ ํญ๋ชฉ์ด ํ์ดํ๋ก ํ๋ฌ์ ๋ ๋๊น์ง ํ๋ก์ธ์ค๋ ์ข ๋ฃ๋์ง ์๊ณ , ๊ฐ์ ๋ก ์ข ๋ฃํ๊ฒ ๋๋ค๋ฉด ํ๋ฌ์๊ฐ ๋์ง ์๊ณ ๋ฝ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ฉฐ, ๋์์ Queue์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ ค๊ณ ํ์ง๋ง ๋ฝ์ด ๊ฑธ๋ฆฌ๊ฒ ๋๋ ๊ต์ฐฉ์ํ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๊ต์ฐฉ์ํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Manager.queue๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด ๋ณ๋์ ํ๋ก์ธ์ค๋ก Manager ๊ฐ์ฒด๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์์ ํ๊ฒ ๊ณต์ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๋ฌธ์ 2
ํ๋ก์ธ์ค ์์ฑ์ ๋ฐ๋ฅธ ์ ์ญ๋ณ์ ๊ด๋ฆฌ ๋ฌธ์
์ ์ญ๋ณ์๋ก ๊ด๋ฆฌ ๋ชฉ์ ์ dict๋ list๋ฅผ ์์ฑํ๊ณ ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๊ฒ ๋๋ค๋ฉด ๋ณ๋์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ก ์ด ๋ณ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋น์ฐํ ๋ณต์ฌํด์ ๊ฐ์ ธ๊ฐ๋ค.
์ด๋ฅผ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด์๋ Manager ๊ฐ์ฒด ๋ฅผ ํตํด์ ์์ฑํด ์ฃผ์ด์ผ ํ๋ค.