TCP ํธ๋์ญ์ ์๊ฐ ์ด๊ณผ ์ค์ ์ ํ์ฉํ๋ timeout ๋งค๊ฐ๋ณ์๋ฅผ ์ด๋ฏธ ์ ํ์ฉํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ๋งค์ฐ ๋์์ด ๋ฉ๋๋ค! ๊ทธ๋ฌ๋ ์ฐ๊ฒฐ ์ ์ฒด์์ ์ ์ฒด ์๊ฐ ์ ํ๋ ์ง์ํด์ผ ํฉ๋๋ค. ์๊ฐ ์ด๊ณผ์ ๋ํ ๋ฌธ์๋ฅผ ์ฝ๋ ๊ฒ์ ์ด๊ฒ์ด ํ์ฌ ์ง์๋์ง ์๋๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ด๋ ์กฐ๊ธ ์ ์ ๋ฌธ์ ๋ฅผ ๊ฒ์ํ๋ฉด์ ์ด ๊ธฐ๋ฅ์ ๋ํ ๋ค๋ฅธ ์์ฒญ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. ์๋ค๋ฉด ์ค๋กํฉ๋๋ค.
์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํ์ด๋จธ๋ฅผ ์ค์ ํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ถ๊ฐ ์ค๋ฒํค๋(์ค๋ ๋๋น ํ๋, ๋ง์ ์ ์์)์ ๊ฒฐ๊ตญ ์ค๋จํด์ผ ํ ๊ฒฝ์ฐ ์ฐ๊ฒฐ ํ๋ง์ ๋ํ ์ญํจ๊ณผ์ ๋ํด ์ฐ๋ คํ๊ณ ์์ต๋๋ค. ์๊ตฌ. ์ฒ์์ ์์ฒญ์ ์ค๋จํ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ๋๋ ๋ฌธ์์์ ๋ช ๋ฐฑํ ๊ฒ์ ๋ณด์ง ๋ชปํ์ต๋๋ค.
๋ฐ๋ผ์ ์ฅ๊ธฐ์ ์ผ๋ก ์ ์ฒด ์๊ฐ ์ ํ์ ์์ฒญ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๋จ๊ธฐ์ ์ผ๋ก ์ด๋ฅผ ๊ตฌํํ๋ ๊ถ์ฅ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์๋ ํ์ธ์ @emgerner-msft๋,
์ฐธ๊ณ ๋ก ๋ค์์ ์ด ์ ํํ ๊ธฐ๋ฅ ์์ฒญ์ด ์๋ ๊ฒฝ์ฐ ์ด ํ ๋ง์ ๋ชจ๋ ๋ณํ์ ๋๋ค.
๋ํ https://github.com/sigmavirus24/requests-toolbelt/issues/51 ์์ ์ด์ ๋ํด ๋ ผ์ํ์ต๋๋ค.
๋ง์ง๋ง ๋งํฌ๋ ์์ฒญ์ ์ถ๊ฐํ์ง ์๊ณ ์ด๋ฅผ ์ฒ๋ฆฌํด์ผ ํ๋ ์ด ํจํค์ง ์ ๋ํด ์ค๋ช ํฉ๋๋ค. ํ์ค์ ๋ค๋ฅธ ํจํค์ง๊ฐ ์ด๋ฏธ ์์ฃผ ์ ํ๊ณ ์์ ๋ ์ด๊ฒ์ ํ๋๋ก ์์ฒญํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ฐธ์กฐํ๋ ํจํค์ง๋ ์น ์์ฒญ์ ์คํํ๊ธฐ ์ํด ๋ณ๋์ ํ๋ก์ธ์ค๋ฅผ ๋ถ๊ธฐํ์ฌ ์ํํฉ๋๋ค. ์ด๋ ์๊ฐ ์ด๊ณผ๋ผ๋ ๋จ์ํ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ ๋งค์ฐ ์ค์ํ ๋ฐฉ๋ฒ์ด๋ฉฐ, ์ ์๊ฐ์๋ ๊ธฐ๋ณธ ์๊ฐ ์ด๊ณผ ๊ธฐ๋ฅ์ด ์๋ ์์ฒญ ์์ฒด๋ฅผ ์ด๋ค ์์ผ๋ก๋ ๋์ฒดํ ์ ์์ต๋๋ค.
@jribbens ์ฐ๋ ๋๋ ํ๋ก์ธ์ค๋ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ผ ์ ์๋ค๋ฉด ๊ทธ๊ฒ์ ๋๋ผ์ด ์ผ์ด ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋๊น์ง๋ ๋ฒฝ์๊ณ ์๊ฐ ์ด๊ณผ๋ฅผ ์ํ ๊ฒฝ์ฐ ํ์ฌ๋ก์๋ ๊ฐ์ฅ ์์ ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ํด๋น ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
@jribbens ๊ฐ ์ค๋ ๋๋ ํ๋ก์ธ์ค๊ฐ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์น ์์ฒญ๋น _ํ๋ก์ธ์ค๊ฐ ๊ณผ๋ํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ง์ ์ธ์ด์๋ ๋จ์ผ ์ถ๊ฐ ์ค๋ ๋ ๋๋ ํ๋ก์ธ์ค๋ฅผ ๊ณต์ ํ๋ ์ฌ๋ฌ ํ์ด๋จธ๊ฐ ์์ต๋๋ค. ํ์ด์ฌ์์ ๊ฐ์ฅ ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
#1928์ด ๋์์ ๋ํด ๊ฐ์ฅ ๋ง์ด ๋ ผ์ํ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ๋๋ถ๋ถ์ ๋ง์ ์ฃผ์ ์ฌํญ์ด ์์ต๋๋ค(์ด๊ฒ์ ์ฌ์ฉ ์ฌ๋ก ๋ฑ์์ ์๋ํ์ง ์์). ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ์ ์ ์ ์ฝ๋๊ฐ ์๊ณ ์ด๊ฒ์ด ์ค์ ๋ก ์์ฒญ์ ์ํ์ง ์๋ ๊ฒฝ์ฐ ๋๋ง์ ์ฌ์ฉ์ ์ ์ ์๋ฃจ์ ์ ์์ฑํ๋ ๊ฒ์ ๊ด์ฐฎ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์์ฒญ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ด์ ๋ ๋ฎ์ ์์ค์ TCP ์ฐ๊ฒฐ ํ๋ง ๋ ผ๋ฆฌ์์ ๋ฒ์ด๋๊ธฐ ์ํ ๊ฒ์ด์ง๋ง ์ด ์ฌ์ฉ์ ์ง์ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ํด๋น ๋ ผ๋ฆฌ๋ฅผ ์์์ผ ํ๋ ํด๋น ์ค๋ ๋๋ฅผ ์ฝ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. .
@emgerner-msft๊ฐ ๋ง์ต๋๋ค. ์ค๋ ๋๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ "์ด ์๊ฐ ์ด๊ณผ"๊ฐ ๋ฐ์ํ๋ @sigmavirus24 ์ ์๊ฒฌ์ ๋ค์ ํผ๋์ค๋ฝ์ต๋๋ค. ์ ์ฒด ํ๋ก์ธ์ค ์์ ์ ๊ธฐํ์ ๊ณ์ฐ(์: deadline = time.time() + total_timeout
)ํ ๋ค์ ๊ฐ๋ณ ์์
์์ ์๊ฐ ์ ํ์ deadline - time.time()
๋ก ์ค์ ํฉ๋๋ค.
์ค๋ ๋๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ์ง ์๊ณ "์ด ์๊ฐ ์ด๊ณผ"๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋งค์ฐ ๋ณดํ์์ฒ๋ผ ๋ณด์ด๋ฉฐ ์ ํ "๋๋์ง" ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทํ์ ์๋ฃจ์ ์ ๋ค์ ์์์ ์ ๋๋ค. _๋๋ถ๋ถ์_ ์ฌ๋๋ค์ด ์ด(๋๋ ๋ฒฝ์๊ณ) ์๊ฐ ์ด๊ณผ๋ฅผ ์ํ๋ ์ด์ ๋ ์ฝ๊ธฐ๊ฐ "์ค๋จ"๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์ฆ, ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ๋๋ค.
r = requests.get(url, stream=True)
for chunk in r.iter_content(chunksize):
process_data(chunk)
iter_content
์ค๊ฐ์ ๊ฐ ์ฝ๊ธฐ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ์ง๋ง ์ฝ๊ธฐ ์ ํ ์๊ฐ๋ณด๋ค ์งง์ ๊ฒฝ์ฐ(์คํธ๋ฆฌ๋ฐํ ๋ ์ ์ฉํ๋ค๊ณ ๊ฐ์ ํ์ง๋ง ์ฌ์ ํ ์ ์ฉํ์ง ์๋ ๊ฒฝ์ฐ์ผ ์ ์์) ์ง์ ํ . ํ์คํ ์ด๊ฒ์ ์๊ณ ๋๋ฆฌํํธ์ ์ผ๊ด ์ ์ฝ ์๊ฐ์ ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๊ธฐ์ตํ๊ณ time.time()
๊ฐ ๋น์ฐธํ๊ฒ ๋ถ์ถฉ๋ถํ ๋๊น์ง ์๋ฃจ์
@jribbens ์ ์ํด ๋จ์ํ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ๊ฒ์
๋๋ค.
๋ง์ง๋ง์ผ๋ก Requests์ API๊ฐ ๊ณ ์ ๋์ด ์๋ค๋ ์ ์ ์ผ๋์ ๋๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์ด ์๊ฐ ์ ํ์ ์ง์ ํ๋ ๋ฐ ์ ํฉํ๊ฑฐ๋ ์ผ๊ด๋ API๊ฐ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๋น์ ์ด ์ ์ํ ๊ฒ์ฒ๋ผ ์๊ฐ ์ด๊ณผ๋ฅผ ๊ตฌํํ๋ค๋ฉด 1๋ถ ๊ธธ์ด์ ์ด ์๊ฐ ์ด๊ณผ๋ฅผ ์ง์ ํ๋ ์๋ง์ ๋ฒ๊ทธ๊ฐ ์์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ๋ง์ง๋ง์ผ๋ก ํ์ธํ์ ๋ 1๋ถ ๋ฏธ๋ง์ด์์ง๋ง ๊ตฌ์ฑ๋ ์ฝ๊ธฐ ์๊ฐ ์ด๊ณผ๊ฐ ์๊ฐ ์ด๊ณผ ์ฝ 1๋ถ 30์ด ๋์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ด๊ฒ์ ์ด๊ฒ์ ์ฐพ๋ ์ฌ๋๋ค์๊ฒ ์ฝ๊ฐ ๋ ๋์ _๋งค์ฐ_ ๊ฑฐ์น ๋ฒฝ ์๊ฐ ์ด๊ณผ์ด์ง๋ง, ์ด๊ฒ์ ์ง์ ๊ตฌํํ๋ ์ฌ๋๊ณผ ๋ค๋ฅด์ง ์์ต๋๋ค.
@sigmavirus24 ๊ฐ ๋ช
ํํ์ง ์์ ๊ฒฝ์ฐ ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ๋ง์น ๊ทธ๊ฒ์ด ๋ฌธ์ ๊ทธ๋๋ก์ ํจ์น๋ผ๊ณ ์๊ฐํ๋ ๊ฒ์ฒ๋ผ ๋ด ์์ฌ ์ฝ๋ ์์น ์ค๋ช
์ ๋นํํ ๊ฒ ๊ฐ์ต๋๋ค. time.time()
๋ ๋น์ ์ด ์๊ฐํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ์ง ์๋๋ค๋ ์ ์ ์ง์ ํด์ผ ํฉ๋๋ค. ์ผ๊ด ์ ์ฝ ์๊ฐ์ ๋ ๊ด๋ จ์ด ์์ผ๋ฉฐ ์ฌ๊ธฐ์ ๋งํ๋ ์๊ฐ ์ฒ๋์ ์๊ณ ์๊ณก๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ๋ํ ์ค๋ช
ํ๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ ์์ ์คํดํ ๊ฒ์
๋๋ค. ๋ง์ง๋ง์ผ๋ก API๊ฐ ๋ฒ์ 2.9.0๋งํผ ์ต๊ทผ์ ๋ณ๊ฒฝ๋์๊ธฐ ๋๋ฌธ์ Requests API๊ฐ "๊ณ ์ "๋๋ค๋ ๊ฒ์ด ๋ฌด์์ ์๋ฏธํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ด ํ ๋ก ์ ๋ถ๋ฆฌํ๊ธฐ ์ํด: ๋๋ ์ค์ ๋ก ์ด๊ฒ์ด ์ฝ๋ค๊ณ ์ฃผ์ฅํ๋ ๊ฒ์ด ์๋๋๋ค. ๊ทธ๊ฒ์ด ์์ ํ ๊ฐ๋จํ๋ค๋ฉด ๋๋ ๊ทธ๊ฒ์ ์ฐ๊ณ ๋น์ ์ ๊ดด๋กญํ์ง ์์ ๊ฒ์ ๋๋ค. :)
๋ด ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1) ๋น์ ์ด ๋์ดํ ์ค๋ ๋์ ๋ชจ๋ ๊ฒ์ ์์ญ์ด ํจ์น์์ต๋๋ค. ๊ด์ฐฎ์ต๋๋ค. ํ์ง๋ง ํ๋ก๋์
ํ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ด๊ฒ์ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ๋ชจ๋ ๊ฒ์ ๊นจ๋จ๋ฆฌ๋ ๋ด๋ถ ๋ณ๊ฒฝ์ ๋ํ ๊ฒฝ๊ณ ๋ฅผ ๋ฐ์๋ค์ผ ์ ์์ต๋๋ค.
2) ๋น์ ์ด ์ค ๋งํฌ์ ์๊ฐ ์ด๊ณผ ๋ฐ์ฝ๋ ์ดํฐ๋ ํ๋ฅญํ์ง๋ง ์ด๊ฒ์ด ์ฐ๊ฒฐ์ ์ด๋ค ์ํฅ์ ๋ฏธ์น๋์ง ํ์คํ์ง ์์ต๋๋ค. ์๊ฐ ์ด๊ณผ๋ฅผ ์ํํ๋ ์ ์ผํ ์ข์ ๋ฐฉ๋ฒ์ ๋ง์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์์ ์ธ์ ํ๋๋ผ๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ผ์ด ์ข
๋ฃ๋๊ณ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ ๋ฑ์ ์ด๋ป๊ฒ ๊ฐ์ ํฉ๋๊น? ์ฐ๋ฆฌ๋ ๋ง์ ์ฐ๊ฒฐ์ ์ํํ๊ณ ์์ผ๋ฉฐ ์ด๋ ์ ์ฌ์ ์ผ๋ก ์๋นํ ๋์ถ๋๊ธฐ ์ฌ์ด. ์์ฒญ์๋ ๋ด๊ฐ ์ฐพ์ ์ ์๋ '์ค๋จ' ๋ฐฉ๋ฒ์ด ์์ต๋๋ค(์๋ชป๋ ๊ฒฝ์ฐ ์์ ). ์ฐ๊ฒฐ ์ข
๋ฃ๋ ์ด๋ป๊ฒ ๋ฐ์ํฉ๋๊น?
๋ด๊ฐ ์ฐพ๊ณ ์๋ ๊ฒ์ ์ด ๋ฌธ์ ๋ฅผ ์ค์ค๋ก ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ช ํํ '์ถ๋ณต๋ฐ์' ๋ฒ์ ์ด๊ฑฐ๋, ์๋ฒฝํ ์๋ฃจ์ ์ด ์๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๊ฐ ํฌํจ๋ ๋ช ๊ฐ์ง ์๋ฃจ์ ์ด ๋ ผ์๋ ๊ฒ์ ๋๋ค. ๋ง์ด ๋ผ?
@emgerner-msft CPython์ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ์์ฒญ์ด ๋ ์ด์ ๊ณ์๋์ง ์์ผ๋ฉด ์ฐ๊ฒฐ์ด ์ข ๋ฃ๋ฉ๋๋ค. ์ด ์์ ์์ ๊ธฐ๋ณธ ์ฐ๊ฒฐ์ ๋ํ ๋ชจ๋ ์ฐธ์กฐ๊ฐ ์์ค๋๊ณ ์์ผ์ด ๋ซํ๊ณ ํ๊ธฐ๋ฉ๋๋ค.
@๋ฃจ์นด์ฌ ๋ค, ๊ฐ์ฌํฉ๋๋ค! ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์์ฒญ์ด ๋ ์ด์ ๊ณ์๋์ง ์๋๋ค๊ณ ์ด๋ป๊ฒ ๊ฒฐ์ ํฉ๋๊น? ์๋ฅผ ๋ค์ด ํ์์์ ๋ฐ์ฝ๋ ์ดํฐ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๊ณ ๋ค์ด๋ก๋ ์ค๊ฐ์ ๋๊ธด ๊ฒฝ์ฐ ์ค์ ๋ก ๋ค์ด๋ก๋๊ฐ ์ธ์ ์ค์ง๋ฉ๋๊น? ์คํธ๋ฆฌ๋ฐ ์ต์ ๊ณผ ๊ด๋ จํ์ฌ ํน๋ณํ ์์ ์ ์ํํด์ผ ํฉ๋๊น?
์๊ฐ ์ด๊ณผ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ฉด ๋ค์ด๋ก๋๊ฐ ์ค์ง๋ฉ๋๋ค. ์ด๊ฒ์ ์ ํธ๊ฐ syscall์ ์ธํฐ๋ฝํธํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ฆ, ์์ผ์ ๋ํ ์ถ๊ฐ ํธ์ถ์ด ์์ต๋๋ค. ์์ฒญ์ด ๋ ์ด์ ๋ฒ์์ ํฌํจ๋์ง ์์ผ๋ฉด(์: ์คํ์ด requests.*
ํจ์ ์ธ๋ถ๋ก ํ๋ฆผ) ์ํ: CPython์ ์ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ์ ๋ฆฌํ๊ณ ์ฐ๊ฒฐ์ ๋์ต๋๋ค. ํน๋ณํ ์คํธ๋ฆฌ๋ฐ ์ต์
์ด ํ์ํ์ง ์์ต๋๋ค.
์๋ฒฝํ. ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ ํ ๋ง์ด ์์ผ๋ฉด ์ค๋ ๋๋ฅผ ๋ซ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฌ์ค ์ฃ์กํฉ๋๋ค. ๊ฑฑ์ ๊ฑฐ๋ฆฌ๊ฐ ํ๋ ๋ ์์ต๋๋ค. Python Timers(์๋ง๋)์ ๋ฌ๋ฆฌ ์ ํธ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋งํ๊ธฐ ๋๋ฌธ์ ํ์์์ ๋ฐ์ฝ๋ ์ดํฐ ์ฝ๋๋ฅผ ๋ ์์ธํ ์ดํด๋ณด์์ต๋๋ค. Windows์์ ์๋ํ์ง ์๋๋ก Python Signal ์ ๋ฌธ์ํ๋ SIGALRM์ผ๋ก ์ ํธ๋ฅผ ํธ์ถ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. Unix ๋ฐ Windows ํ๊ฒฝ์ ๋ฌผ๋ก Python 2.7 ๋ฐ 3.3+(์์ฒญ ์์ฒด์ ๋งค์ฐ ์ ์ฌ)์์ ์๋ํ๋ ค๋ฉด ์ด๊ฒ์ด ํ์ํฉ๋๋ค. ์กฐ๊ธ ๋ ๋๋ฌ๋ณด๊ณ ์ด๊ฒ์ด ์ค์ ๋ก ์๋ํ๋์ง ํ์ธํ๊ฒ ์ต๋๋ค.
@emgerner-msft ๋ต๋ตํ๋ค์. =(
@Lukasa ์, ๊ธฐ๋ณธ ์ฌ์ฉ ์ค๋ํซ ์ ์๋ํ์ง๋ง Windows์์ ์๋ํ์ง ์์ต๋๋ค. ์ฝ๋/์์ ๋ฅผ ์ข ๋ ์ฝ๊ณ ๋ง์ง์๊ฑฐ๋ฆฌ๋ฉฐ ์ ํธ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด ํจํค์ง๊ฐ ์๋ํ ์ ์์ง๋ง ๋ชจ๋ ๊ฒ์ด ์ ํ ๊ฐ๋ฅํด์ผ ํ๋๋ฐ ์ด๋ ๋ด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ๊ฐ ์๋๋๋ค. ๋ด๊ฐ ๋งํ ์์๋ ํ ์๊ฐ ์ด๊ณผ ๋ฐ์ฝ๋ ์ดํฐ๋ ๋ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํฉ๋๋ค. ๋ค๋ฅธ ์์ด๋์ด๊ฐ ์์ต๋๊น?
@emgerner-msft Windows ์ ์ฉ ์ ํธ๊ฐ ์ ํฉํ์ง ์๋ค๊ณ ํ์ ํ์ญ๋๊น?
@Lukasa ์์งํ ๋งํด์, ๋๋ ๋จ์ํ ๋ชจ๋ฆ ๋๋ค. ๋๋ ์ ์ ์ ํธ๋ฅผ ์ฌ์ฉํ์ง ์์์ผ๋ฉฐ, ๋น์ ์ด ๊ทธ๋ค์ด ์์ฒญ์ ๋ฐฉํดํ ๊ฒ์ด๋ผ๊ณ ๋งํ ๋๊น์ง ๊นจ๋ซ์ง ๋ชปํ ๊ฒ์ฒ๋ผ ๋ฌด์์ด ์ ์ ํ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋๋ ๋ํ ์ด๊ฒ์ Windows์์ ์๋์ํค๋ ค๊ณ ํ์ง ์์ต๋๋ค. ์์ ํ ํฌ๋ก์คํ๋ซํผ ์ง์(Windows ๋ฐ Unix)๊ณผ Python 2 ๋ฐ Python 3 ์ง์์ด ๋ชจ๋ ํ์ํฉ๋๋ค. ๋๋ฌด ๋ง์ ์ ํธ๊ฐ ํ๋ซํผ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋ํ๋์ ๋๋ฅผ ๋์ง๊ณ ์์ต๋๋ค. Timer ๋ ๋ด๊ฐ ๋ณด๊ณ ์๋ ์๋ฃจ์ ์ค ํ๋๋ก์ ๋ ๋ฎ์ ์์ค์ผ๋ก ๋ณด์ด๋ฏ๋ก ์ ์ฝ์ ์ฒ๋ฆฌํ ์ ์์ง๋ง ์ฐ๊ฒฐ์ ์ด๋ป๊ฒ ๋ซ์ ์ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ ๋ง์ ๊ฒ์ ์ฝ์ ์๋ ์์ง๋ง ์ด๊ฒ์ด ์ฌ๋ฌ๋ถ์ผ๋ก๋ถํฐ ์ถ๊ฐ ์ง์นจ์ ์ป๊ณ ์ ํ๋ ์ด์ ์ ๋๋ค. :)
๊ทธ๋์ ์ด๊ณณ์ ์ ๋ง ๊น๋ค๋ก์ด ๊ณณ์ ๋๋ค.
ํ์ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ํธ์ธ ์ธํฐ๋ฝํธ๋ฅผ ์ ์ธํ๊ณ ์ค๋ ๋๋ฅผ ์ฃฝ์ด๋ ํฌ๋ก์ค ํ๋ซํผ ๋ฐฉ๋ฒ์ด ๊ฑฐ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ฆ, ์ ํธ๊ฐ ํ๋ซํผ ๊ฐ์ ์ด ์์ ์ ์ํํ๋ ๋ฐ ํ์ํ ์ ์ผํ ๊ฒฝ๋ก๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ Windowsy Pythony ์ ๋ฌธ๊ฐ์๊ฒ ping์ ์๋ํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค: @brettcannon , ์ฌ๊ธฐ์ ์ข์ ์ ์์ด ์์ต๋๊น?
ํฅ๋ฏธ๋กญ๊ฒ๋ ๊ตฌํ ๋ฐ ํ ์คํธ์ ์์ ์ด ํ์ํ ๊ฒ ์ธ์ ์์ฒญ์ "์ด ์๊ฐ ์ด๊ณผ"๋ฅผ ๊ตฌํํ์ง ์์ ์ด์ ๊ฐ ์์ต๋๊น? ๋ด ๋ง์, ๊ทธ๊ฒ์ ๊ตฌํํ๋ ํจ์น๊ฐ ์ค๋๋ ๋ง์ ์ฒ๋ผ ๋ํ๋๋ค๋ฉด ์ด๋ก ์ ์ผ๋ก ๊ฑฐ๋ถ๋๊ฑฐ๋ ๋ฐ์๋ค์ฌ์ง๊น์? "๋ถํ์ํ ๋ณต์ก์ฑ ์ ๊ฑฐ" ๊ด์ ์ ๊ฐ์ฌํ๊ณ ๋์ํ์ง๋ง "๋ณ๋์ ํ๋ก์ธ์ค๋ฅผ ๋ถ๊ธฐํ์ฌ ์ํํ ์ ์๋ค"๋ ๊ฒ์ด ์ ์๊ฐ์๋ ์ด ๊ธฐ๋ฅ์ ๋ถํ์ํ๊ฒ ๋ง๋๋ ๊ฒ์ ์๋๋๋ค.
@jribbens ์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
ํํธ 1์ ๊ทธ๋ฌํ ํจ์น์ ๋ณต์ก์ฑ์ด ๋งค์ฐ ๋๋ค๋ ๊ฒ์ ๋๋ค. ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ค๋ฉด ์์ผ ์์ค์์ ์๊ฐ ์ด๊ณผ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ํจ์น๋ฅผ ์ด๋ฏธ ํจ์นํ httplib๋ฅผ ํตํด ํจ์น๋ฅผ ๋๋ฆฌ ์ ๋ฌํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ๋ณ๊ฒฝ์ ๋ฌ์ฑํ๋ ค๋ฉด httplib์ ๋๋ฌํ๊ณ ๋ ๋ณต์กํ ๋ฉ์๋์ ์ฝ 50%๋ฅผ ๋ค์ ๊ตฌํํด์ผ ํฉ๋๋ค.
ํํธ 2๋ ๊ทธ๋ฌํ ํจ์น์ ์ ์ง ๊ด๋ฆฌ๊ฐ ์๋์ ์ผ๋ก ๋ถ๋ด๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ํํ๋ ค๋ฉด httplib์ ๋ณ๋ ฌ ํฌํฌ(ํ์ฌ๋ก์๋ ๋ ์ ์ ํ๊ฒ๋ http.client)๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์์ํด์ผ ํ ๊ฒ์ ๋๋ค. ๋๋ ์ด๋ฌํ ์ข ๋ฅ์ ๋ณ๊ฒฝ์ ๋ ์ ํฉํ ๋ค๋ฅธ HTTP ์คํ์ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ๋ ๋งก์์ผ ํฉ๋๋ค. ์ด ๋ถ๋ถ์ ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์ ํ๋ ์ฌ๋๋ค์ด ํํ ๋์น๋ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ตฌํ ๋น์ฉ์ ๋์ง๋ง ๋ชจ๋ ํ๋ซํผ์์ ํด๋น ๊ธฐ๋ฅ์ ์ง์ํ๋ ์ง์์ ์ธ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ ๋นํ๋ฉด ๊ทธ๊ฒ์ _์๋ฌด๊ฒ๋_ ์๋๋๋ค.
3๋ถ์์๋ ๊ทธ๋ฐ ํจ์น์ ์ฅ์ ์ด ๋ถ๋ถ๋ช ํ๋ค. ์ ์ฒด ํ์์์ ํจ์น๋ฅผ ์ํ๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ์์ ์ด ์ํ๋ ๊ฒ์ ๋ํด ์์ ํ ๋ช ํํ๊ฒ ์๊ฐํ์ง ์๋๋ค๋ ๊ฒ์ด ์ ๊ฒฝํ์ด์์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด ์๊ฐ ์ด๊ณผ ๋งค๊ฐ๋ณ์๋ ์๋ฌด ์ด์ ์์ด ์๋ฒฝํ๊ฒ ์ํธํ ์์ฒญ์ ์ข ๋ฃํ๋ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋๋ค.
์๋ฅผ ๋ค์ด ํ์ผ์ ๋ค์ด๋ก๋ํ๋ ์ฝ๊ฐ์ ์ฝ๋๋ฅผ ์ค๊ณํ์ผ๋ฉฐ ์ค๋จ์ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ฒ์์๋ ๊ท ์ผํ ์ด ์๊ฐ ์ ํ์ ์ค์ ํ๊ณ ์ถ์ง๋ง("์์ฒญ์ 30์ด ์ด์ ๊ฑธ๋ฆด ์ ์์ต๋๋ค!") ์ด๋ฌํ ์๊ฐ ์ ํ์ ์์ ์ ๋์นฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ์ผ ํฌ๊ธฐ๊ฐ 30MB์์ 30GB๋ก ๋ณ๊ฒฝ๋๋ฉด ๋ค์ด๋ก๋๊ฐ ์์ ํ ์ ์์ผ์ง๋ผ๋ ๊ทธ๋ฌํ ํ์ผ์ ๊ทธ๋ฐ ์ข ๋ฅ์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก _์ ๋_ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
๋ค์ ๋งํด, ์ด ์๊ฐ ์ด๊ณผ๋ ๋งค๋ ฅ์ ์ธ ๊ณจ์นซ๊ฑฐ๋ฆฌ์
๋๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ์ง๋ ๋ชปํฉ๋๋ค. ์ ์๊ฐ์ ๋ ์ ์ฉํ ์ ๊ทผ ๋ฐฉ์์ stream=True
๋ฐ iter_content
์ ๊ฒฐํฉ๋ ์์ผ๋ณ ์์
์ ํ ์๊ฐ์ ํ์ฉํ๊ณ ๋ฐ์ดํฐ ์ฒญํฌ์ ๋ํ ์ ํ ์๊ฐ์ ํ ๋นํ๋ ๊ฒ์
๋๋ค. iter_content
๊ฐ ์๋ํ๋ ๋ฐฉ์์ผ๋ก ์ ์ด ํ๋ฆ์ ๋ค์ ๊ท์น์ ์ธ ๊ฐ๊ฒฉ์ผ๋ก ์ฝ๋์ ๋ฐํ๋ฉ๋๋ค. ์ฆ, ์์ผ ์์ค ์ ํ ์๊ฐ(์: 5์ด)์ ์ค์ ํ ๋ค์ ์๋นํ ์์ ์ฒญํฌ(์: 1KB ๋ฐ์ดํฐ)์ ๋ํด iter_content
๋ฅผ ์ค์ ํ ์ ์์ผ๋ฉฐ ์ ๊ทน์ ์ผ๋ก ๊ณต๊ฒฉ์ ๋ฐ์ง ์๋ ํ ์๋น์ค ๊ฑฐ๋ถ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๊ณ ๋น๊ต์ ํ์ ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ๊ฐ๋ฅํฉ๋๋ค. ์๋น์ค ๊ฑฐ๋ถ๊ฐ ์ ๋ง ๊ฑฑ์ ๋๋ค๋ฉด ์์ผ ์์ค ์ ํ ์๊ฐ์ ํจ์ฌ ๋ ๋ฎ๊ฒ ์ค์ ํ๊ณ ์ฒญํฌ ํฌ๊ธฐ๋ฅผ ๋ ์๊ฒ(0.5์ด ๋ฐ 512๋ฐ์ดํธ) ์ค์ ํ์ฌ ์ ๊ธฐ์ ์ผ๋ก ์ ์ด ํ๋ฆ์ ๋ค์ ๋ฐ์ ์ ์๋๋ก ํ์ญ์์ค.
์ด ๋ชจ๋ ๊ฒ์ ๊ฒฐ๊ณผ๋ ์ด ์๊ฐ ์ด๊ณผ๊ฐ ์ด์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค์๋์ด๋ผ๊ณ ์๊ฐํ๋ค๋ ๊ฒ์
๋๋ค. ๊ฐ์ฅ ์ข์ ์ข
๋ฅ์ ์๊ฐ ์ ํ์ ํฐ ์๋ต์ ํ์ฉํ์ฌ ํํ๋กญ๊ฒ ๋ค์ด๋ก๋ํ ์ ์๋๋ก ์กฐ์ ๋ ๊ฒ์ด๋ฉฐ ์ด๋ฌํ ์๊ฐ ์ ํ์ ์์ผ ์์ค ์๊ฐ ์ ํ ๋ฐ iter_content
์ ์ํด ๊ฐ์ฅ ์ ์ ๊ณต๋ฉ๋๋ค.
์๋ง๋ @zooba ๋ Windows๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ค์ ๋ก ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์์ด๋์ด๋ฅผ ๊ฐ์ง๊ณ ์์ ๊ฒ์ ๋๋ค. :)
(๊ด๋ จ ์์ด ๋ด๊ฐ ๊ฐ์ฅ ์ข์ํ๋ ์ผ ์ค ํ๋๋ GitHub ๋ฌธ์ ์์ ์ ๋ฌธ๊ฐ์ ๋ฐ์ด์ง ์ฒด์ธ์ ์ค์ ํ๋ ๊ฒ์ ๋๋ค.)
ํํ, ์ด๋ฏธ @zooba ์ @brettcannon์ ์๊ณ ์์ต๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ํด๊ฒฐ์ฑ ์ด ๊ทธ๋ค์๊ฒ๋ ๋์์ด ๋ ๊ฒ์ด๋ฏ๋ก ์ฌ๊ธฐ ๋๋ ๋ด๋ถ์ ์ผ๋ก ๊ทธ๋ค๊ณผ ๋ ผ์ํ ์ ์์ต๋๋ค.
@emgerner-msft ๊ทธ๋ด ์๋ ์์ ๊ฑฐ๋ผ ์๊ฐํ์ง๋ง, ๊ทธ๋ ๊ฒ ์๊ฐํ๊ณ ์ถ์ง๋ ์์์ต๋๋ค. MSFT๋ ํฐ ์กฐ์ง์ ๋๋ค!
@Lukasa ๋ฐฉ๊ธ ์์ ์ด ํ ์คํธ ๋ฒฝ์ ์ฝ๋ ๊ฒ๋ง์ผ๋ก๋-์ฌ๋ฏธ์์ต๋๋ค! stream=True ๋ฐ iter_content์์ ๋ค์ด๋ก๋ ์๊ฐ์ ๋ํ ๋ ผ์์์ ๋์ฉ๋ ์ ๋ก๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ผํ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
_PS_: ์์ 'Put another way,..'๋ก ์์ํ๋ ๋จ๋ฝ์ ๋ด๊ฐ ๋ฌธ์์์ ์ฐพ๋ ์ผ์ข ์ ์ง์นจ์ ๋๋ค. ์ต๋ ์๊ฐ ์ด๊ณผ์ ๋ํ ์์ฒญ ์(๋ฐ ์ํํ์ง ์๋ ์ ํจํ ์ด์ )๋ฅผ ๊ฐ์ํ ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์๊ฐ ์ด๊ณผ ๋ฌธ์ ์ ํด๋น ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
lol @lukasa ์ ์ง๋ณด์์ ๋ํ ๋น์ ์ ์์ ์ ์ด๋ฏธ ๋ง์์์ ํ๊ณ ์์์ง๋ง "ํน์ง ๋ ์ค์๋"์ ๋ํด์๋ ๋น์ ๊ณผ ์์ ํ ๋ฐ๋์ ๋๋ค. ์ด ์๊ฐ ์ด๊ณผ๋ฅผ ์ํ์ง ์๋ ์ฌ๋์ ์ํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ๋ช ํํ๊ฒ ์๊ฐํ์ง ์๊ณ ์์ผ๋ฉฐ "30MB ๋ค์ด๋ก๋๊ฐ 30GB๋ก ๋ณ๊ฒฝ๋์ด ์คํจํฉ๋๋ค"๋ผ๋ ๋ฒ๊ทธ๋ก ์ค๋ช ํ๋ ์ํฉ์ ์์ํ๋ ๋ฐ ์ด๋ ค์์ด ์์ต๋๋ค. ์ฌ์ค ์ ์ตํ ๊ธฐ๋ฅ์ ๋๋ค!
stream=True
๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๊ฐ ๋น์ทํ ์์
์ ์ํํ ์ ์์ง๋ง(์ด ์๊ฐ ์ด๊ณผ์ ๋๋ถ๋ถ์ ์ด์ ์ด ์๋ ๊ฒ์ผ๋ก ์์ฌ๋จ) ์์ฒญ์ ์์ง๋ ๊ทธ๊ฒ์ด ๋น์ ์ ์ํด ์ฒ๋ฆฌํ๋ค๋ ๊ฒ์
๋๋ค...
๋๋ ๊ทธ๊ฒ์ด ๋น์ ์ ์ํด ์ผ์ ์ฒ๋ฆฌํ๋ค๋ ์์ฒญ์ ์์ ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
๊ทธ๊ฒ์ ๋น์ ์ ์ํด HTTP๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ์ฐ๊ฒฐ ๋ฐ ์ฝ๊ธฐ ์๊ฐ ์ด๊ณผ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ช ๋ ๋์ ๊ธฐ๋ฅ ์ ์ง์ ๋ํ ๋ช ๊ฐ์ง ๋ฉด์ ๋ฅผ ๋ฐ์๋ค๋ ์ฌ์ค์ ์ ์ฉ์ฑ, ๋ฐ๋์งํจ, ์ผ๊ด์ฑ(์ฌ๋ฌ ํ๋ซํผ์์) ๋ฐ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ์ ๋ํ ๋ ผ์์ ๊ด๋ จ์ด ์์ต๋๋ค. ๊ทํ์ ํผ๋๋ฐฑ๊ณผ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์๋ก์ด ์ ๋ณด๋ฅผ ์๋ ค์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋ํ ์ด ํ๋ก์ ํธ์์ ๊ฑฐ๋ถ๋ ๊ธฐ๋ฅ ์์ฒญ์ ์์ ์ฌ์ฉ์์ ๋ํ ๊ณตํต ์ฌ์ฉ ํจํด(์์ฒญ ๋๊ตฌ ๋ฒจํธ)์ ๊ตฌํํ๋ ๋ณ๋์ ํ๋ก์ ํธ๊ฐ ์๋ค๋ ์ฌ์ค์ ์ํด ์์ฒญ์ด ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํ์ง ์๋๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค. ์ด ์๊ฐ ์ด๊ณผ๊ฐ ์ด๋์๋ ์ํ๋ค๋ฉด ๊ฑฐ๊ธฐ์ ์์ ๊ฒ์ด์ง๋ง ๋ค์ ๋งํ์ง๋ง Windows, BSD, Linux ๋ฐ OSX์์ ์ฐ์ํ ํ ์คํธ ๋ฒ์์ ์ ์ง ๊ด๋ฆฌ์ ๋ํ ์ ๋ชฝ ์์ด ์๋ํด์ผ ํฉ๋๋ค.
stream=True ๋ฐ iter_content์์ ๋ค์ด๋ก๋ ์๊ฐ์ ๋ํ ๋ ผ์์์ ๋์ฉ๋ ์ ๋ก๋๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ผํ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์
๋ก๋๋ฅผ ์ํ ์์ฑ๊ธฐ๋ฅผ ์ ์ํ๊ณ data
์ ์ ๋ฌํฉ๋๋ค. ๋๋ ์ฒญํฌ ์ธ์ฝ๋ฉ์ด ๋น์ ์๊ฒ ์ ๋ฆฌํ์ง ์๋ค๋ฉด ๋ง๋ฒ ๊ฐ์ read
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ๋ฅ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ณ _that_ ์ data
์ ์ ๋ฌํ์ญ์์ค.
์กฐ๊ธ ์์ธํ ์ค๋ช
ํ๊ฒ ์ต๋๋ค. ์์ฑ๊ธฐ๋ฅผ data
์ ์ ๋ฌํ๋ฉด ์์ฒญ์ด ์ด๋ฅผ ๋ฐ๋ณตํ๊ณ ๊ฐ ์ฒญํฌ๋ฅผ ์ฐจ๋ก๋ก ๋ณด๋
๋๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ค๋ฉด ๊ฐ ์ฒญํฌ์ ๋ํด ์ฝ๋์ ๋ํ ์ ์ด ํ๋ฆ์ ๋ฐ๋์ ์ ๋ฌํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์์ฒญ์ ์์ ํ ์ค๋จํ๊ธฐ ์ํ ์์ธ throw๋ฅผ ํฌํจํ์ฌ ๊ทธ ์๊ฐ์ ์ํ๋ ๋ชจ๋ ์์
์ ์ํํ ์ ์์ต๋๋ค.
์ด๋ค ์ด์ ๋ก ์
๋ก๋์ ์ฒญํฌ ์ ์ก ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ(์๋ง๋ ๋ฌธ์ ์ ์๋ฒ๊ฐ ์ค์ ๋ก ๋์ ๊ฒฝ์ฐ ๊ฐ๋ฅ), ๊ธธ์ด๊ฐ ์๋ ํ์ผ๊ณผ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค์ ๋ค์์ ์ํํ์ฌ ๋์ผํ ์์
์ ์ํํ ์ ์์ต๋๋ค. read
ํธ์ถ์์ ๋ง๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ด ํธ์ถ์ 8192๋ฐ์ดํธ ์ฒญํฌ์ ๋ํด ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ๋ฉ๋๋ค. ๋ค์ ๋งํ์ง๋ง, ์ด๋ ๊ฒ ํ๋ฉด ์ ์ด ํ๋ฆ์ด ๊ฐํ์ ์ผ๋ก ์ฝ๋๋ฅผ ํต๊ณผํ์ฌ ๊ณ ์ ํ ๋
ผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ถ์ : ์์ 'Put another way,..'๋ก ์์ํ๋ ๋จ๋ฝ์ ๋ด๊ฐ ๋ฌธ์์์ ์ฐพ๋ ์ผ์ข ์ ์ง์นจ์ ๋๋ค. ์ต๋ ์๊ฐ ์ด๊ณผ์ ๋ํ ์์ฒญ ์(๋ฐ ์ด๋ฅผ ์ํํ์ง ์๋ ์ ํจํ ์ด์ )๋ฅผ ๊ฐ์ํ ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์๊ฐ ์ด๊ณผ ๋ฌธ์์ ํด๋น ์ ๋ณด๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
๋๋ _์ถ์ธกํ๋ค_. ๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ๋งํด์ ๋๋ ๋ฌธ์์ ๋ค์ ๋ฐฉ์ด์ ์ธ ํ ์คํธ๋ฅผ ๋ฃ๋ ๊ฒ์ ๋ํด ํญ์ ๊ธด์ฅํ๊ณ ์์ต๋๋ค. FAQ์ ๋ค์ด๊ฐ ์ ์์ ๊ฒ ๊ฐ์ง๋ง, ์ ์ฐ๋ฆฌ์๊ฒ ๋ฌด์ธ๊ฐ๊ฐ ์๋ _์๋_ ์ด์ ๋ฅผ ์ค๋ช ํ๋ ํ ์คํธ๋ ๋ฌธ์์์ ๊ฑฐ์ ์ ์ฉํ์ง ์์ต๋๋ค. ๋ฌธ์์ ๊ณต๊ฐ์ ๋ญ๊ฐ๋ฅผ ํ๊ธฐ ์ํ ๋ ์ํผ์ ์ํด ๋ ์ ์ ๊ณต๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด ์๊ฐ ์ด๊ณผ๋ฅผ ์ํ์ง ์๋ ์ฌ๋์ ์ํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ๋ช ํํ๊ฒ ์๊ฐํ์ง ์๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ "30MB ๋ค์ด๋ก๋๊ฐ 30GB๋ก ๋ณ๊ฒฝ๋์ด ์คํจํฉ๋๋ค"๋ผ๋ ๋ฒ๊ทธ๋ก ์ค๋ช ํ๋ ์ํฉ์ ์์ํ๋ ๋ฐ ์ด๋ ค์์ด ์์ต๋๋ค. ์ฌ์ค ์ ์ตํ ๊ธฐ๋ฅ!
ํ, ๋ ์๋์ผ:
์ค์ ๋ก ๊ฐ๋ฐ์๊ฐ ์ฒ๋ฆฌํ ํ์ผ ํฌ๊ธฐ๋ฅผ 10๋ฐฐ ์ด๋ด๋ก ์๊ณ ์๋ ๊ฒฝ์ฐ๋ ๋๋ฌธ ๊ฒฝ์ฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๊ฐ๋ฐ์๋ ์ ํ ๋ชจ๋ฆ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ํฌ๊ธฐ์ ๋ํด ๊ฐ์ ํ๋ ๊ฒ์ ํ๋ช ํ์ง ์๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ๋ค์ด๋ก๋ ํฌ๊ธฐ์ ๋ํ ์ ์ฝ์ด ์๋ ๊ฒฝ์ฐ ์ฝ๋๋ ์์์ ์ผ๋ก ์ธ์ฝ๋ฉํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ฝ์ ์ ์๋๋ก ์ฌ์ฉ์ ๋คํธ์ํฌ์ ๋์ญํญ๊ณผ ํผํฉํ๊ธฐ๋ณด๋ค๋ ์ด๋ฌํ ๊ฐ์ (์: ์ฝํ ์ธ ๊ธธ์ด ํ์ธ์ ํํ๋ก)์ ์๋์ ์ผ๋ก ์ธ์ฝ๋ฉํด์ผ ํฉ๋๋ค. ์ฝ๋๋ ๊ทธ๊ฒ๋ค์ ๋ช ํํ๊ฒ ๋ณผ ์ ์์ต๋๋ค.
ํ์ง๋ง ์์ฒญ์ ์์ง๋ ๊ทธ๊ฒ์ด ๋น์ ์ ์ํด ์ผ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค ...
์์ฒญ์ ๋งค์ฐ ์๋์ ์ผ๋ก ์ฌ์ฉ์๋ฅผ ์ํด ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํ์ง ์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ํ๋ ค๊ณ ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ ์ผ์ด๋ฉฐ, ๊ทธ๋ ๊ฒ ํ๋ ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ๋ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ ๊ธฐ์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ๋ฌด์ธ๊ฐ๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด urllib3์ผ๋ก ๋๋กญ๋ค์ดํ๋ผ๊ณ ๋งํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋๋ถ๋ถ์ ์ฌ์ฉ์๊ฐ ํ ์ ์๋ ๊ฒ๋ณด๋ค ๋ ์ํ๊ฑฐ๋ ๋ ๊น๋ํ๊ฒ ํ ์ ์๋ ๊ฒฝ์ฐ์๋ง ์์ฒญ์ ์ฝ๋๋ฅผ ๋ฃ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ฐ์น๊ฐ ์์ต๋๋ค. ํนํ ์ฌ์ฉ์ ๊ธฐ๋ฐ ์ ์ฒด์์ ์ง๊ณ๋ ๋ ์๋์ ์ผ๋ก ํ๊ณ ์ ํธ๋ฆฌํฐ๋ก ์ธ์๋๋ ์ ์ ๊ฐ์ํ ๋ ์ด ์๊ฐ ์ด๊ณผ๊ฐ ๊ทธ๋ฌํ ๊ฒ๋ค ์ค ํ๋๋ผ๋ ์ ์์ ์ ๋ ์์ง ๋งค๋ํ์ง ์์์ต๋๋ค.
์ฆ, ๋๋ ๋ด๊ฐ ํ๋ ธ๋ค๊ณ ํ์ ํ ์ ์์ต๋๋ค. ๋๋ ์์ง ๊ทธ๊ฒ์ ๋ํ ์ค๋๋ ฅ ์๋ ์ฃผ์ฅ์ ๋ณด์ง ๋ชปํ์ต๋๋ค. ๋ช ๊ฐ์ง ์ด์ ๋ฅผ ์ ๊ณตํด์ผํฉ๋๋ค!).
@sigmavirus24
์ด ์๊ฐ ์ด๊ณผ๊ฐ ์ด๋์๋ ์ํ๋ค๋ฉด ๊ฑฐ๊ธฐ์ ์์ ๊ฒ์ด์ง๋ง ๋ค์ ๋งํ์ง๋ง Windows, BSD, Linux ๋ฐ OSX์์ ์ฐ์ํ ํ ์คํธ ๋ฒ์์ ์ ์ง ๊ด๋ฆฌ์ ๋ํ ์ ๋ชฝ ์์ด ์๋ํด์ผ ํฉ๋๋ค.
๋์!
@lukasa ๋ด ์๊ฐ์ ๋ด๊ฐ ๊ทธ๊ฒ์ ์ํ ๋ฟ๋ง ์๋๋ผ ์ค์ ๋ก ๊ฑฐ์ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๋ฉด(๋๋ ์ด๋ฏธ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ๋ค๋ฉด) ์ํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ํผํด์ผ ํ๋ค๊ณ ๋งํ ์์ ์ฌ์ฉ ์๋๋ฆฌ์ค ์ค ์ ๋ฐ์ ์ค์ํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค(์น ์คํฌ๋ ์ดํผ ๋ฐ ๋ก๊ทธ ์์ง๊ธฐ) - ๋ค๋ฅธ ๋ ๊ฐ์ง๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์๋์ผ๋ก ๋ค์ด๋ก๋๋ฅผ ์ทจ์ํ ์ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก ๋ ํ์ํฉ๋๋ค. ๊ทธ๋ค์ ์ํ๋ค. UI ์์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๊ณ ์ ์ฒด ์๊ฐ ์ ํ์ ์ฌ์ฉํ์ง ์๋ ๋ชจ๋ ๊ฒ์ ๋ด ๋ณด๊ธฐ์ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค!
๋ด ์๊ฐ์ ๋ด๊ฐ ๊ทธ๊ฒ์ ์ํ ๋ฟ๋ง ์๋๋ผ ์ค์ ๋ก ๊ฑฐ์ ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๋ฉด(๋๋ ์ด๋ฏธ ์กด์ฌํ์ง ์๋๋ค๋ ๊ฒ์ ๊นจ๋ซ์ง ๋ชปํ๋ค๋ฉด) ์ํ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค.
@jribbens ์ฐ๋ฆฌ๋ ์ฌ์ฉ์ ์๊ตฌ ์ฌํญ์ ์ดํดํ๊ณ ๋ํํ๋ ๋ฐ ๋ช ๋ (์ฐ๋ฆฌ ์ธ ์ฌ๋์ ๊ฒฝํ์ ํฉ์น๋ฉด 10๋ ์ด์)์ด ์์ต๋๋ค. ๊ฑฐ์ ๋ชจ๋ (์ต์ 98%) ์ฌ์ฉ์์๊ฒ ํ์ํ ๊ฒ์ ์ฐ๊ฒฐ ๋ฐ ์ฝ๊ธฐ ์๊ฐ ์ด๊ณผ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ฉ์์ ๋ชฉ์๋ฆฌ๊ฐ ๋งค์ฐ ์์ ์์๊ฐ ์ ์ฒด ์๊ฐ ์ด๊ณผ๋ฅผ ์ํ๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. ํด๋น ๊ธฐ๋ฅ์ ๋ํ ์ ์ฌ์ ์ฌ์ฉ์ ๊ทธ๋ฃน์ ๊ท๋ชจ์ ํด๋น ๊ธฐ๋ฅ์ด ํ์ํ์ง ์์ ์ฌ์ฉ์์ ์ ์ฌ์ ๊ท๋ชจ ๋ฐ ๊ธฐ๋ฅ์ ์ ์ง ๊ด๋ฆฌ ๋ฐ ๊ฐ๋ฐ์ ๋ณต์ก์ฑ์ผ๋ก ์ถ์ ํ ์ ์๋ ์ฌํญ์ ๊ฐ์ํ ๋ ์ค์ ๋ก๋ ์ฐ๋ฆฌ๊ฐ ํ๋ ค๋ ์ผ์ด ์๋๋๋ค. ํ ๊ฒ.
๊ณต์ ํ _์๋ก์ด_ ๊ฒ์ด ์๋ค๋ฉด ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ฃ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง ๋ง์ํ์ ๊ฒ์ ์ ์ฒด ์๊ฐ ์ ํ ์์ด ์์ฒญ์ ์ฌ์ฉํ๋ ๋ชจ๋ ๊ฒ์ด ๋ฒ๊ทธ๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ค์ ๋์์ธ ๊ฒฐ์ ์ด ๋ฒ๊ทธ๊ฐ ์๋ค๋ ๋น์ ์ ์ฃผ์ฅ์ ํ๋ฅผ ๋ผ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉ์์ ์ง์ฑ์ ๋ชจ์ํ๋ ๊ฒ์ ์ผ๊ฐํด ์ฃผ์ญ์์ค.
@sigmavirus24 ์ด ์ค๋ ๋ ์ ์ฒด์์ ๋น์ ์ ๋ถํ์ํ๊ฒ ๋ชจ์์ ์ด๊ณ ์ ๋์ ์ด๋ฉฐ ๋ฌด๋กํ์ต๋๋ค. ์ ์คํ๊ฒ ๋ถํํ๋ ๋ฐ์ ๋๋ค. ์ ๋ฐ ๊ทธ๋งํด ์ฃผ์ธ์.
@Lukasa ์คํธ๋ฆฌ๋ฐ ์ ๋ก๋ ๋ฐ ๋ค์ด๋ก๋ ๋ฐ ์ด๋ฌํ ์ฃผ์ ์ ๋ํ ๋ฌธ์๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ทํ์ ์ ์์ ์์ธํ ์ดํด๋ณด์์ต๋๋ค. ๋ด ๊ฐ์ /์ง๋ฌธ์ ํ์ธํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
์์ผ/TCP ํ๋กํ ์ฝ/๋ฑ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ดํด๊ฐ ์์ง๋ง urllib๊ฐ ๋ฎ์ ์์ค์์ ์ด๋ฌํ ๊ฐ๋ ๊ณผ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋๋ ์์ฒญ์ด ๊ฐ์ ์ ๋ฌํ๋ ๊ฒ ์ธ์ ํน๋ณํ ์์ ์ ์ํํ๋์ง ์ ํํ ์์ง ๋ชปํฉ๋๋ค. ๋จ์ํ ์ ์ด ํ๋ฆ์ ๋ค์ ๊ฐ์ ธ์ค๊ณ ์ค๋ ๋ ์ข ๋ฃ์ ๊ด๋ จ๋ ํฌ๋ก์คํ๋ซํผ ๋ฌธ์ ๋ฅผ ๊ฐ์ํ ๋ ์์ฒด ์ ํ ์๊ฐ ์ฒด๊ณ๋ฅผ ์ ์ฉํ๋ ๊ฒ์ด ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ํ ์๊ฐ์ด ์ด๋ป๊ฒ ์ ์ฉ๋๋์ง ์ ํํ ์ดํดํ๊ณ ์ถ์ต๋๋ค. ๋ด ์ง๋ฌธ์ ๋ตํ ์ ์๋ ์ถ๊ฐ ์ฝ๊ธฐ ์๋ฃ๊ฐ ์์ผ๋ฉด ์ธ์ ๋ ์ง ์ ๋ฅผ ์ฐธ์กฐํ์ญ์์ค! ์ด์จ๋ ์ด๊ฒ์ด ๋์ ๋ง์ง๋ง ์ง๋ฌธ์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. :)
์ง๊ธ๊น์ง ๋์์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
@emgerner-msft ํ์ธ:
io.BufferedReader
์ ๊ฐ์ ๊ฒ)์ ๋ํํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ถฉ๋ถํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ ๋๊น์ง ํ์ํ ๋งํผ์ recv_into
ํธ์ถ์ ์ํํฉ๋๋ค. ๊ทธ๊ฒ์ 0๋งํผ ์ ๊ฑฐ๋(๋ฒํผ์ ์ถฉ๋ถํ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์๋ ๊ฒฝ์ฐ) ์๊ฒฉ ํผ์ด๊ฐ ํ ๋ฒ์ ํ ๋ฐ์ดํธ๋ฅผ ๋๋ฆฝ-ํผ๋(drip-feed)ํ๋ ๊ฒฝ์ฐ ์์ ํ ๋ฐ์ดํธ ์๋งํผ ์ ํํ ์ ์์ต๋๋ค. ์ด์ ๋ํด ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ผ์ ๊ฑฐ์ ์์ต๋๋ค. ์ด๋ฌํ ๋ฒํผ๋ง๋ ๊ฐ์ฒด์ ๋ํ read()
ํธ์ถ์ ํน์ฑ์ผ๋ก ์ธํด ๊ฐ recv_into
ํธ์ถ ๊ฐ์ ์ ์ด ํ๋ฆ์ ๋ค์ ์ป์ง ๋ชปํฉ๋๋ค.์ฆ, n์ด ์ด์ ๊ธฐ๋ค๋ฆฌ์ง ์๋๋ก ํ๋ _์ ์ผํ_ ๋ฐฉ๋ฒ์ 1
iter_content
๋ฅผ ์ํํ๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ํ์ผ์ ๋ค์ด๋ก๋ํ๋ ํฐ๋ฌด๋์์ด ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด์ง๋ง(Python ์ฝ๋์์ ๋๋ฌด ๋ง์ ์๊ฐ์ ์๋นํจ) ์ํ๋ ๋ณด์ฅ์ ์ป์ ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์
๋๋ค.
socket.setdefaulttimeout
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.iter_content
๊ฒฝ์ฐ์ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฒช์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ๋ค์ด๋ก๋ํ๋ผ๋ ์์ฒญ์ด ์๋ ๊ฒฝ์ฐ ๋ณธ๋ฌธ์ ๋ค์ด๋ก๋ํ๋ ๋ฐ ํ์ํ ๋งํผ์ recv_into
ํธ์ถ์ ๋ด๋ณด๋ด๊ณ ์๊ฐ ์ด๊ณผ๊ฐ ์ ์ฉ๋ฉ๋๋ค. ์ฐจ๋ก๋๋ก ๊ฐ์์๊ฒ.์ฌ๊ธฐ์ ํต์ฌ ๋ฌธ์ ์ ๋ถ๋ชํ๊ฒ ๋ฉ๋๋ค. ์์ฒญ์ด ์ ํํ ์ํ๋ ๊ฒ์ ๋ฌ์ฑํ ์ ์์ ๋งํผ ์์ผ์ ์ถฉ๋ถํ ๊ฐ๊น์์ง์ง ์์ต๋๋ค. ๋ณด๋ด๊ธฐ ์๊ฐ ์ด๊ณผ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ด๋ ๊ณ ๋ ค ์ค์ธ ๊ธฐ๋ฅ ์์ฒญ ์์
์ด๋ฉฐ ์ฝ๊ธฐ ์๊ฐ ์ด๊ณผ์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช์ง ์์ง๋ง ๋ค๋ฅธ ๋ชจ๋ ๊ฒฝ์ฐ์๋ httplib
๊ฐ ์ค์ํ์ (์ฌ๋ฐ๋ฅด๊ฒ) ์ฃผ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฉ์ถฅ๋๋ค. ๋ฒํผ๋ง๋ ์์ผ ํํ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ๋๋จธ์ง httplib
๋ ๋ฒํผ๋ง๋ ํํ์ ์ฌ์ฉํฉ๋๋ค.
@๋ฃจ์นด์ฌ
์, ์๋ง์ด์ผ, ํํ. ๊ทธ๋ด ์๋ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฌ์ค์ ๋ด๊ฐ ํ๋ ธ๊ธฐ๋ฅผ ๋ฐ๋๋ค.
๋จผ์ send timeout์ด ์ ์คํ ํ์ํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ์ ๋ก๋๊ฐ ๋ฌดํ์ ์ค๋จ๋ ์ ์์ผ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ณํ์ด ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. :/
ํ์ฌ๋ก์๋ ๋ถ๊ฐ๋ฅํ ์ํฉ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ด ์๊ฐ ์ด๊ณผ์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ง์์ด ์์ต๋๋ค(์ด๋ฅผ ์ดํดํฉ๋๋ค). ๊ธฐ์กด ์๊ฐ ์ ํ์ด ๋ค์ํ ์ฒญํฌ ํฌ๊ธฐ์์ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ํํ ๋ณด์ฅํ ์ ์์ต๋๋ค. ๋ง์ฝ ์๋ค๋ฉด ์๊ฐ์ ์์ฝํ ์ ์์ต๋๋ค: ์ฐ๊ฒฐ ์๊ฐ ์ด๊ณผ + ์ฝ๊ธฐ ์๊ฐ ์ด๊ณผ * ์ฒญํฌ ํฌ๊ธฐ. ์คํธ๋ฆผ ๋ชจ๋์ ์์ฑ๊ธฐ๋ก ํ๋ฆ์ ์ค๋จํ ์ ์๋ ๊ฒ์ ์ข์ง๋ง ํฌ๋ก์ค ํ๋ซํผ ๋ฐฉ์์ผ๋ก ์ค๋ ๋๋ฅผ ์ค์ ๋ก ์ค๋จํ๋ ์๋ฃจ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ๋ ๋์์ด ๋์ง ์์ต๋๋ค. ์์ผ๋ก ๋์๊ฐ ๋ค๋ฅธ ์ต์ ์ด ์์ต๋๊น? ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฌด์์ ํ๊ณ ์์ต๋๊น?
๋จผ์ send timeout์ด ์ ์คํ ํ์ํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ์ ๋ก๋๊ฐ ๋ฌดํ์ ์ค๋จ๋ ์ ์์ผ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๊ณํ์ด ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. :/
๋ฐ๋ผ์ ์์ฒญ์ ์ฌ์ฉ๋๋ ์๊ฐ ์ด๊ณผ ๋
ผ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก urllib3์ ๋
ผ๋ฆฌ์ด๋ฏ๋ก ๋ณ๊ฒฝ์ ์ํํ๊ธฐ์ ์ถฉ๋ถํด์ผ ํฉ๋๋ค. ์์ ๋กญ๊ฒ ๊ธฐ๋ฅ ์์ฒญ์ ์ด๋ฉด ๋ณ๊ฒฝ์ ํตํด ๋์์ ๋๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋จ๊ธฐ์ ์ผ๋ก๋ setdefaulttimeout
๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋กญ๊ฒ ์กฐ์ฌํ์ญ์์ค.
์์ผ๋ก ๋์๊ฐ ๋ค๋ฅธ ์ต์ ์ด ์์ต๋๊น? ๋ค๋ฅธ ์ฌ์ฉ์๋ค์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฌด์์ ํ๊ณ ์์ต๋๊น?
์ฌ๊ธฐ์ ์๋ ์ต์ ์ ํน์ ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
๊ฒฐ์ ์ ํ์์์์ด _๋ฐ๋์_ ์์ด์ผ ํ๋ ๊ฒฝ์ฐ(์ฆ, ์์ฒญ์ด _n_์ด ์ด์ ๊ฑธ๋ฆฌ์ง ์๋๋ก ๋ณด์ฅํ ์ ์์ด์ผ ํ๋ ๊ฒฝ์ฐ) ์ค๋๋ ์กด์ฌํ๋ Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฝ๊ฒ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค. Python 2.7์์๋ ๊ฐ recv
ํธ์ถ์ ๋ํด ์์ฐจ์ ์ธ ์๊ฐ ์ ํ์ ์คํํ ์ ์๋๋ก socket._fileobject
๋ฅผ ํจ์นํด์ผ ํ์ง๋ง Python 3์์๋ ๊ตฌํ๋ ํด๋์ค์ ํจ์นํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๋ ์ด๋ ต์ต๋๋ค. C( io.BufferedReader
)์ ์์ต๋๋ค. ์ด๊ฒ์ ์
๋ชฝ์ด ๋ ๊ฒ์
๋๋ค.
๊ทธ๋ ์ง ์์ผ๋ฉด ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ฒํผ๋ง์ _ํด์ _ ํด์ ํ๋ ๊ฒ์ด ์ ์ผํ ๋ฐฉ๋ฒ์
๋๋ค. ๊ทธ๊ฒ์ httplib์ ๊ทธ ์์ ์๋ ๋ชจ๋ ํจ์น๋ฅผ ๊นจ๋จ๋ฆด ๊ฒ์
๋๋ค. ์์ผ์์ read
์์คํ
ํธ์ถ์ฒ๋ผ ๋์ํ์ง ์๊ณ ๋์ $#์ฒ๋ผ ๋์ํ๋ read(x)
ํธ์ถ์ ํ ์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค read
ํ์ผ์ ๋ํ ์์คํ
ํธ์ถ(์ฆ, ๊ฒฐ์ ์ ๊ธธ์ด๋ฅผ ๋ฐํ).
๋ค์ ๋งํด, ๊ฒฐ์ ์ ํ์์์์ด _ํ์ํ๋ฉด_ ์์ฒญ๋ ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ด๋ฅผ ์ ๊ณตํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก httplib
๋๋ socket.makefile
๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ด ๋์ ๊ฒ์
๋๋ค. ๋ฐ๋ณต์ ์ผ๋ก ๋ฐํํ๋ ๊ธธ์ด๋ฅผ ์ ์ธํ๊ณ ์ ์๋ ์๊ฐ์ ์ ์ด๊ฐ ์ฌ์ฉ์์๊ฒ ๋ฐํ๋๋๋ก ๋ณด์ฅํ ์ ์๋ ํ์คํ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. -1 ์ฝ์ต๋๋ค. ๋น์ ์ _ํ ์_ ์์ง๋ง, ๋น์ ์ ์ฑ๊ณผ์ ํด๋ฅผ ๋ผ์น ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ์ฌ๊ธฐ์ ์ ์ถฉ์์ด ์์ต๋๋ค. ๊ฒฐ์ ์ ์๊ฐ ์ ํ์ ์ํ ๊ฒฝ์ฐ Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋ฐ ์์ฒญ์์)์์ ๋ฒํผ๋ง์ด ๊ตฌํ๋๋ ๋ฐฉ์์ ์ด๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ญ๋๋ค. ๋ฒํผ๋ง์ ๋นํ์ฑํํ๊ณ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ์ฌ ์ด๋ฅผ ๋ค์ ์ป์ ์ ์์ง๋ง ์๊ฐ ์ด๊ณผ๋ฅผ ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ๋ฒํผ๋ง์ ๋ค์ ๊ตฌํํ์ง ์๋ ํ ์ ์ฌ์ ์ผ๋ก ์ฑ๋ฅ์ด ์๋นํ ๋๋น ์ง ์ ์์ต๋๋ค.
BufferedReader
ํด๋์ค์ Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ํ ์ฝ๋๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ ์ ์์ต๋๋ค. Python ์ฌ์ฉ์์๊ฒ ๊ด์ฌ์ด ์๋์ง ํ์คํ ๋ฌผ์ด๋ณผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์จ์ ์ฐธ์ง ์์ ๊ฒ์
๋๋ค.
๋ฐ๋ผ์ ์์ฒญ์ ์ฌ์ฉ๋๋ ์๊ฐ ์ด๊ณผ ๋ ผ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก urllib3์ ๋ ผ๋ฆฌ์ด๋ฏ๋ก ๋ณ๊ฒฝ์ ์ํํ๊ธฐ์ ์ถฉ๋ถํด์ผ ํฉ๋๋ค. ์์ ๋กญ๊ฒ ๊ธฐ๋ฅ ์์ฒญ์ ์ด๋ฉด ๋ณ๊ฒฝ์ ํตํด ๋์์ ๋๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋จ๊ธฐ์ ์ผ๋ก๋ setdefaulttimeout์ ์ฌ์ฉํ์ฌ ์์ ๋กญ๊ฒ ์กฐ์ฌํ์ญ์์ค.
urllib3 ๋๋ ์ฌ๊ธฐ์์ ๊ธฐ๋ฅ ์์ฒญ? ์ต๋ํ ๋นจ๋ฆฌ ํ๋(๋๋ ๋ ๋ค)๋ฅผ ์ด ๊ฒ์ ๋๋ค.
urllib3์ ๊ธฐ๋ฅ ์์ฒญ: ์์ฒญ์์ ์๋ก์ด ๊ฒ์ ๋ ธ์ถํ ํ์๊ฐ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@jribbens ์ฌ๊ธฐ์๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
ํํธ 1์ ๊ทธ๋ฌํ ํจ์น์ ๋ณต์ก์ฑ์ด ๋งค์ฐ ๋๋ค๋ ๊ฒ์ ๋๋ค. ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ค๋ฉด ์์ผ ์์ค์์ ์๊ฐ ์ด๊ณผ๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ๋ณด๋ค ๋ ๋ง์ ํจ์น๋ฅผ ์ด๋ฏธ ํจ์นํ httplib๋ฅผ ํตํด ํจ์น๋ฅผ ๋๋ฆฌ ์ ๋ฌํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๊ธฐ๋ฅ์ ๋ณ๊ฒฝ์ ๋ฌ์ฑํ๋ ค๋ฉด httplib์ ๋๋ฌํ๊ณ ๋ ๋ณต์กํ ๋ฉ์๋์ ์ฝ 50%๋ฅผ ๋ค์ ๊ตฌํํด์ผ ํฉ๋๋ค.
ํํธ 2๋ ๊ทธ๋ฌํ ํจ์น์ ์ ์ง ๊ด๋ฆฌ๊ฐ ์๋์ ์ผ๋ก ๋ถ๋ด๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ํํ๋ ค๋ฉด httplib์ ๋ณ๋ ฌ ํฌํฌ(ํ์ฌ๋ก์๋ ๋ ์ ์ ํ๊ฒ๋ http.client)๋ฅผ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์์ํด์ผ ํ ๊ฒ์ ๋๋ค. ๋๋ ์ด๋ฌํ ์ข ๋ฅ์ ๋ณ๊ฒฝ์ ๋ ์ ํฉํ ๋ค๋ฅธ HTTP ์คํ์ ์ ์ง ๊ด๋ฆฌ ๋ถ๋ด์ ๋ ๋งก์์ผ ํฉ๋๋ค. ์ด ๋ถ๋ถ์ ๊ทธ๋ฌํ ๊ธฐ๋ฅ์ ๊ฐ๊ณ ์ ํ๋ ์ฌ๋๋ค์ด ํํ ๋์น๋ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ตฌํ ๋น์ฉ์ ๋์ง๋ง ๋ชจ๋ ํ๋ซํผ์์ ํด๋น ๊ธฐ๋ฅ์ ์ง์ํ๋ ์ง์์ ์ธ ์ ์ง ๊ด๋ฆฌ ๋น์ฉ์ ๋นํ๋ฉด ๊ทธ๊ฒ์ _์๋ฌด๊ฒ๋_ ์๋๋๋ค.
3๋ถ์์๋ ๊ทธ๋ฐ ํจ์น์ ์ฅ์ ์ด ๋ถ๋ถ๋ช ํ๋ค. ์ ์ฒด ํ์์์ ํจ์น๋ฅผ ์ํ๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ์์ ์ด ์ํ๋ ๊ฒ์ ๋ํด ์์ ํ ๋ช ํํ๊ฒ ์๊ฐํ์ง ์๋๋ค๋ ๊ฒ์ด ์ ๊ฒฝํ์ด์์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด ์๊ฐ ์ด๊ณผ ๋งค๊ฐ๋ณ์๋ ์๋ฌด ์ด์ ์์ด ์๋ฒฝํ๊ฒ ์ํธํ ์์ฒญ์ ์ข ๋ฃํ๋ ํจ๊ณผ๋ฅผ ๊ฐ์ง๋๋ค.
์๋ฅผ ๋ค์ด ํ์ผ์ ๋ค์ด๋ก๋ํ๋ ์ฝ๊ฐ์ ์ฝ๋๋ฅผ ์ค๊ณํ์ผ๋ฉฐ ์ค๋จ์ ์ฒ๋ฆฌํ๋ ค๊ณ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ฒ์์๋ ๊ท ์ผํ ์ด ์๊ฐ ์ ํ์ ์ค์ ํ๊ณ ์ถ์ง๋ง("์์ฒญ์ 30์ด ์ด์ ๊ฑธ๋ฆด ์ ์์ต๋๋ค!") ์ด๋ฌํ ์๊ฐ ์ ํ์ ์์ ์ ๋์นฉ๋๋ค. ์๋ฅผ ๋ค์ด ํ์ผ ํฌ๊ธฐ๊ฐ 30MB์์ 30GB๋ก ๋ณ๊ฒฝ๋๋ฉด ๋ค์ด๋ก๋๊ฐ ์์ ํ ์ ์์ผ์ง๋ผ๋ ๊ทธ๋ฌํ ํ์ผ์ ๊ทธ๋ฐ ์ข ๋ฅ์ ์๊ฐ ๊ฐ๊ฒฉ์ผ๋ก _์ ๋_ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
๋ค์ ๋งํด, ์ด ์๊ฐ ์ด๊ณผ๋ ๋งค๋ ฅ์ ์ธ ๊ณจ์นซ๊ฑฐ๋ฆฌ์ ๋๋ค. ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ์ง๋ ๋ชปํฉ๋๋ค. ์ ์๊ฐ์ ๋ ์ ์ฉํ ์ ๊ทผ ๋ฐฉ์์
stream=True
๋ฐiter_content
์ ๊ฒฐํฉ๋ ์์ผ๋ณ ์์ ์ ํ ์๊ฐ์ ํ์ฉํ๊ณ ๋ฐ์ดํฐ ์ฒญํฌ์ ๋ํ ์ ํ ์๊ฐ์ ํ ๋นํ๋ ๊ฒ์ ๋๋ค.iter_content
๊ฐ ์๋ํ๋ ๋ฐฉ์์ผ๋ก ์ ์ด ํ๋ฆ์ ๋ค์ ๊ท์น์ ์ธ ๊ฐ๊ฒฉ์ผ๋ก ์ฝ๋์ ๋ฐํ๋ฉ๋๋ค. ์ฆ, ์์ผ ์์ค ์ ํ ์๊ฐ(์: 5์ด)์ ์ค์ ํ ๋ค์ ์๋นํ ์์ ์ฒญํฌ(์: 1KB ๋ฐ์ดํฐ)์ ๋ํดiter_content
๋ฅผ ์ค์ ํ ์ ์์ผ๋ฉฐ ์ ๊ทน์ ์ผ๋ก ๊ณต๊ฒฉ์ ๋ฐ์ง ์๋ ํ ์๋น์ค ๊ฑฐ๋ถ๊ฐ ๋ฐ์ํ์ง ์๋๋ค๊ณ ๋น๊ต์ ํ์ ํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ๊ฐ๋ฅํฉ๋๋ค. ์๋น์ค ๊ฑฐ๋ถ๊ฐ ์ ๋ง ๊ฑฑ์ ๋๋ค๋ฉด ์์ผ ์์ค ์ ํ ์๊ฐ์ ํจ์ฌ ๋ ๋ฎ๊ฒ ์ค์ ํ๊ณ ์ฒญํฌ ํฌ๊ธฐ๋ฅผ ๋ ์๊ฒ(0.5์ด ๋ฐ 512๋ฐ์ดํธ) ์ค์ ํ์ฌ ์ ๊ธฐ์ ์ผ๋ก ์ ์ด ํ๋ฆ์ ๋ค์ ๋ฐ์ ์ ์๋๋ก ํ์ญ์์ค.์ด ๋ชจ๋ ๊ฒ์ ๊ฒฐ๊ณผ๋ ์ด ์๊ฐ ์ด๊ณผ๊ฐ ์ด์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค์๋์ด๋ผ๊ณ ์๊ฐํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ฐ์ฅ ์ข์ ์ข ๋ฅ์ ์๊ฐ ์ ํ์ ํฐ ์๋ต์ ํ์ฉํ์ฌ ํํ๋กญ๊ฒ ๋ค์ด๋ก๋ํ ์ ์๋๋ก ์กฐ์ ๋ ๊ฒ์ด๋ฉฐ ์ด๋ฌํ ์๊ฐ ์ ํ์ ์์ผ ์์ค ์๊ฐ ์ ํ ๋ฐ
iter_content
์ ์ํด ๊ฐ์ฅ ์ ์ ๊ณต๋ฉ๋๋ค.