46,200원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
싱글톤 패턴 관련해서 질문입니다!
안녕하세요 :) 라우터 내에서 매번 NaverBookScraper의 인스턴스를 만들어서 스크래핑을 하고 디비에 저장하는 과정으로 코드를 이해를 하였는데요. 혹시 여기서 매번 인스턴스를 만드는 이유가 있으실까요? 현재 코드에서는 싱글톤으로 라우터 밖에 생성해서 계속 그 인스턴스를 사용해도 되지않나 싶어서요. 혹시 이유가 따로 있으신건지 궁금합니다 :)
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
search 함수 관련해서 질문이 있습니다.
search함수에서 [ [10개] , [10개] [10개]] -> [30개] 있는걸로 수정하시기 위해서 append하는 로직이 더 있는데요. ( reulst = [] 이후 코드 ) 해당 코드가 async with ~~ as seesion : 의 indent안에 꼭 있어야 되나 싶어서욥. await asyncio.gather (~ )로 데이터를 다 가져와서 all_data에 있는 상태일텐데 여기서 30개로 합치는 코드는 해당 indent가 아니라 밖에 있어도 되지않나 생각이 들었습니다. 혹시 그렇게 할 경우에 로직에 제가 놓친 이슈가 있을 부분이 있을까요? 그리고 저렇게 with 안에 전부 두신 이유가 있을지도 궁금합니다 :)
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
mongodb connection시 질문입니다.
안녕하세요 odmantic 관련해서 질문이 있는데요. client에서 따로 maxpoolsize나 minpoolsize 같은걸 안정하신 이유는 가벼운 프로젝트라서 일까요??
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
동시성 프로그래밍으로 웹 크롤링, 스크래핑 성능 극대화 - 강좌 코드 에러
제공해주신 url에 접근시 ssl에러가 나오는데 원인을 잘 모르겠습니다. 다음은 터미널에 찍힌 전문 입니다. (venv) dhkim@dhkimui-MacBookPro Collection % python3 scraping_2.py 1 2 3 4 5 6 7 8 9 Traceback (most recent call last): File "/Users/dhkim/Source/venv/lib/python3.10/site-packages/aiohttp/connector.py", line 986, in _wrap_create_connection return await self._loop.create_connection(*args, **kwargs) # type: ignore[return-value] # noqa File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/base_events.py", line 1089, in create_connection transport, protocol = await self._create_connection_transport( File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/base_events.py", line 1119, in _create_connection_transport await waiter File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/sslproto.py", line 534, in data_received ssldata, appdata = self._sslpipe.feed_ssldata(data) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/sslproto.py", line 188, in feed_ssldata self._sslobj.do_handshake() File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/ssl.py", line 974, in do_handshake self._sslobj.do_handshake() ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:997) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/Users/dhkim/Source/venv/Collection/scraping_2.py", line 35, in <module> asyncio.run(main()) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete return future.result() File "/Users/dhkim/Source/venv/Collection/scraping_2.py", line 31, in main await asyncio.gather(*[fetch(session, url, i) for i, url in enumerate(urls)]) File "/Users/dhkim/Source/venv/Collection/scraping_2.py", line 17, in fetch async with session.get(url) as response: File "/Users/dhkim/Source/venv/lib/python3.10/site-packages/aiohttp/client.py", line 1138, in __aenter__ self._resp = await self._coro File "/Users/dhkim/Source/venv/lib/python3.10/site-packages/aiohttp/client.py", line 535, in _request conn = await self._connector.connect( File "/Users/dhkim/Source/venv/lib/python3.10/site-packages/aiohttp/connector.py", line 542, in connect proto = await self._create_connection(req, traces, timeout) File "/Users/dhkim/Source/venv/lib/python3.10/site-packages/aiohttp/connector.py", line 907, in _create_connection _, proto = await self._create_direct_connection(req, traces, timeout) File "/Users/dhkim/Source/venv/lib/python3.10/site-packages/aiohttp/connector.py", line 1206, in _create_direct_connection raise last_exc File "/Users/dhkim/Source/venv/lib/python3.10/site-packages/aiohttp/connector.py", line 1175, in _create_direct_connection transp, proto = await self._wrap_create_connection( File "/Users/dhkim/Source/venv/lib/python3.10/site-packages/aiohttp/connector.py", line 988, in _wrap_create_connection raise ClientConnectorCertificateError(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host bjpublic.tistory.com:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:997)')]
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
실시간으로 변동되는 데이터를 가져온다면 어떻게 처리해야할까요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요:) "프로젝트 마무리" 영상을 보고 궁금한 점이 있어 질문드립니다. 만약 '파이썬' 관련 책이 같은 날 다른 시간에 추가되었다면 어떻게 처리해야할까요? (=실시간으로 변동되는 데이터를 어떻게 처리해야할까요?) [상황] - 04/03일 13:00시에 '파이썬'을 검색을 했을 때, 책들이 수집되어 DB에 저장 - 04/03일 '파이썬' 관련 새로운 책 추가되었음. - 04/03일 18:00시에 다시 '파이썬' 검색 현재 개발된 코드는 이와 같은 상황에서 04/03일 18:00시에 동일한 keyword를 검색해도 04/03일 13:00시에 DB에 저장된 데이터가 출력될 것입니다. 시간마다 변동되는 데이터가 존재하고 검색을 할때마다 스크래핑을 진행 -> 데이터를 DB에 저장해야한다면, 검색할 때마다 DB 데이터를 지웠다가 다시 저장하는 로직으로 구현을 해야할까요?
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
파이썬은 씨피유 코어를 하나만 사용하는 언어인가요?
병렬성 지원을 안한다고 하셔서 궁금하게 생겼는데요 8코어 cpu를 가지고 있어도 파이썬에서는 무조건 1개의 코어만 사용하게 되는건지 궁금합니다
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
which python치면 에러가 발생합니다
안녕하세요 좋은 강좌 감사합니다 파이썬 3.8.1 윈도우즈인데요 가상환경에 들어가서 python 치고 실행하면 제대로 설치된걸로 나오는데요 which python치면 which : 'which' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포 함된 경우 경로가 올바른지 검증한 다음 다시 시도하십시오. 위치 줄:1 문자:1 + which + ~~~~~ + CategoryInfo : ObjectNotFound: (which:String) [], CommandNotFoundException + FullyQualifiedErrorId : CommandNotFoundException 이런 에러가 나옵니다 ㅠㅠ 인터프리터 문제인가 해서 쉬프트 컨트롤 p눌러서 인터프리터를 해당 가상환경 폴더의 scripts/python으로 지정했습니다(이렇게 하는게 맞는건지는 모르겠지만요) 그리고 which python치면 같은 에러가 계속 나옵니다
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
multiprocessing.Pool.map과 ProcessPoolExecutor.map의 차이 & with 구문
안녕하세요! 먼저 좋은 수업 제공해주셔서 감사합니다! 몇 가지 질문이 있어 올립니다 1. 멀티프로세스를 만들 때 multiprocessing.Pool.map (또는 multiprocessing.Process)을 이용하는 경우가 있던데, 수업 때 알려주신 ProcessPoolExecutor.map와 어떤 차이가 있는 건지 알 수 있을까요? 2. with 구문을 사용하지 않아도 되는 건가요? (어떤 코드에서는 with ProcessPoolExecutor(10) as executor 이런 식으로 with 구문을 사용한 경우도 있더라고요)
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
비동기성과 동시성 관계
비동기성은 순차적으로 실행되지 않는 것을 의미하고, 동시성은 switching해가며 한 번에 여러 작업을 하는 것으로 이해했습니다. 따라서 비동기성 예제로 보여주신 코루틴의 경우는 싱글 스레드에서 동시성을 구현한 것이라고 이해했습니다. 제가 궁금한 것은 비동기성은 항상 동시성인지, 그리고 동시성이면 항상 비동기성인지 입니다. (필요충분 관계인 것인지) (동시성이면서 동기성일 수도 있는건가요?) 만약 비동기성<->동시성 이 아니라면(필요충분 관계가 아니라면) 두 개념의 핵심적인 차이가 궁금합니다.
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
배포할때 에러에 대해 질문드려요
배포할때 에러때문에 막혀서 질문드립니다. ModuleNotFoundError: No module named 'pymongo.mongo_replica_set_client' 이런 오류가 뜨는데 로컬환경에서는 아무 문제없이 진행이되는데 아무리 구글링해봐도 해결을 못해서 질문 드립니다
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
카카오 API 사용시 사진 저장 안되는 부분
강의에서 사용하신 네이버 검색 API가 안되는듯 하여 카카오 API로 사용하고 있습니다. 코드는 거의 동일합니다.네이버를 사용 못한 이유는 아래처럼 적혀있어서 바뀐것 같던데 강의대로 진행하니 접속 안되더라구요(아래 API들은 개발자센터 API 제휴신청을 받지 않습니다. 대상: 검색, 캡차(음성), 캡차(이미지), Papago 번역, 한글인명로마자 변환, 지도(웹), 지도(모바일), 단축URL ...이후 생략)아래에 코드 전체와 터미널 메세지 올려드립니다.카카오API를 사용할때 현재 증상은 코드를 계속 반복 실행하다보면 이미지가 거의 저장되지 않고 어쩌다 딱 1개 저장되고 그러는데요.이미지 저장이 제대로 안되는 이유는 첫째로 카카오 API로 Document에서 url을 가져올경우 아래처럼 http://cfile211.uf.daum.net/image/99C2724D5BFC51620F146D이런식으로 .jpg .png로 끝나지 않는 주소들이 많더라구요. 이럴때 .jpg로 받을 수 있는 방법이 있을까요?(해당 url의 이미지 오른쪽클릭하고 저장 누르면 catcat4302c29fd7b6b7b78c357dbafaf8e6b7.jpg 처럼 jpg 이미지로 받아지는데 주소에는 다르게 되어있네요)추가로 kr.storage.gettyimagesbank.com << 여기에도 이유는 모르겠는데 접속 안된다고 뜨고 있구요. 뭔가 연결이 불안정한것 같은데 처음 배우다보니 잘 모르겠습니다.. 그나마 .jpg로 끝나는 주소들은 손상된 이미지 파일이 다운되고 수십번 코드 반복실행하니까 정상적인 이미지가 1개 받아졌습니다. 손상된 이미지들도 전체 url 갯수만큼이 아닌 몇개씩만 받아지다가 끊기고 그러네요. 정상적인 이미지가 수십번 코드 돌리다보니 딱 1개 받아졌는데 받아진 것도 신기하네요.. (구글링 해보니 이런 코멘트가 있네요 Does your network require the use of a proxy server? Minor differences in reading the proxy configuration could explain why requests works, but aiohttp doesn't, all on the same computer.) 어디가 잘못되었을지 봐주시면 감사하겠습니다. import os import aiohttp import asyncio from config import get_secret import aiofiles async def img_downloader(session, img): img_name = img.split("/")[-1] try: os.makedirs("./images") except FileExistsError: pass # async with aiohttp.ClientSession() as session: async with session.get(img) as response: if response.status == 200: async with aiofiles.open(f"./images/{img_name}", mode="wb") as file: img_data = await response.read() await file.write(img_data) # await file.close() else: print(f"Unable to download image {img_name} form {img}") async def fetch(session, url, i): print(i + 1) headers = {"Authorization": get_secret("AUTHORIZATION")} async with session.get(url, headers=headers) as response: result = await response.json() documents = result["documents"] image_url = [document["image_url"] for document in documents] print(image_url) await asyncio.gather(*[img_downloader(session, img) for img in image_url]) async def main(): BASE_URL = "https://dapi.kakao.com/v2/search/image" keyword = "cat" urls = [f"{BASE_URL}?query={keyword}&page={i}&size=20" for i in range(6, 10)] async with aiohttp.ClientSession() as session: await asyncio.gather(*[fetch(session, url, i) for i, url in enumerate(urls)]) if __name__ == "__main__": asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) asyncio.run(main()) (venv) C:\repos\drf-project>python 06-scraping.py 1 2 3 4 ['http://cfile211.uf.daum.net/image/99C2724D5BFC51620F146D', 'http://cfile272.uf.daum.net/image/2241933F565A896D0B3DF8', 'http://imagescdn.gettyimagesbank.com/500/15/183/277/0/470624520.jpg', 'http://imagescdn.gettyimagesbank.com/500/15/133/212/0/497283946.jpg', 'http://postfiles8.naver.net/20141001_279/hankukilbo_1412142133250i7s1r_JPEG/architects-for-animals-cat-shelters-fixnation-designboom-08.jpg?type=w2', 'https://k.kakaocdn.net/dn/cv3Kiz/btq2ytNi9XL/VANConlQulYNVK4wp6luj1/img.jpg', 'http://cfile218.uf.daum.net/image/99EA5A33598E086229AA1D', 'http://cfile220.uf.daum.net/image/998E2433598E094C2C792D', 'http://imagescdn.gettyimagesbank.com/500/21/021/938/0/1319877684.jpg', 'http://imagescdn.gettyimagesbank.com/500/201705/a10816517.jpg', 'http://cfile254.uf.daum.net/image/231BBD3856C70225024607', 'http://imagescdn.gettyimagesbank.com/500/21/913/673/0/1310254926.jpg', 'http://cfile225.uf.daum.net/image/2333A03854CE570F1C692F', 'http://cfile208.uf.daum.net/image/255CE64757B5E5B02AABB7', 'http://cfile245.uf.daum.net/image/261F55395527AC222D1A76', 'http://cfile249.uf.daum.net/image/21564C3A5583C9802817A5', 'https://k.kakaocdn.net/dn/cLlRZg/btq5fDl7GHg/NXzeW2ksvn7q8ARkzB49Q0/img.png', 'http://kr.storage.gettyimagesbank.com/thumb/201907/jv11407647.jpg', 'https://image-notepet.akamaized.net/seimage/20160608%2F16%EC%8A%A4%EC%BD%94%ED%8B%B0%EC%8B%9C_%ED%8F%B4%EB%93%9C.jpg', 'http://imagescdn.gettyimagesbank.com/500/18/728/560/0/1028301566.jpg'] ['http://postfiles1.naver.net/data5/2005/4/14/96/Samantha_%28the_Cat%29-love_me____.jpg?type=w3', 'http://postfiles9.naver.net/MjAxOTA0MjlfMTg2/MDAxNTU2NTMwNzA3NzQ3.1k0bcz6MSA2KJGIbqB76UMUBgKDZfc-FjEy9CcAQSUcg.-P3nz27RxJffodHD2Isrq39B-87u7Gq2-6trteNDsXMg.JPEG.j9fbm93/HP_PCC_lg_cat_training_hero.jpg?type=w966', 'http://cfile234.uf.daum.net/image/99C04633599EDE401765C3', 'http://imagescdn.gettyimagesbank.com/500/20/345/909/0/1267584560.jpg', 'http://imagescdn.gettyimagesbank.com/500/15/166/064/0/484403996.jpg', 'http://cfile296.uf.daum.net/image/23225639569E64000AAA7F', 'http://imagescdn.gettyimagesbank.com/500/16/819/541/0/506298170.jpg', 'http://imagescdn.gettyimagesbank.com/500/11/041/065/0/140018638.jpg', 'http://kr.storage.gettyimagesbank.com/thumb/201907/jv11516337.jpg', 'http://cfile276.uf.daum.net/image/2210183F54E97EEF23E6D8', 'http://cfile222.uf.daum.net/image/2246E24F57B5E5DA07A8FF', 'https://k.kakaocdn.net/dn/o9Fz9/btq6xZ8ZXg3/X14guc4ZVUq16RqHEHLtkk/img.png', 'http://www.lifeanddogue.com/images/magazine/201606/style/style03_05.jpg', 'http://imagescdn.gettyimagesbank.com/500/21/661/306/0/1346632438.jpg', 'http://cfs6.blog.daum.net/image/10/blog/2007/11/23/07/18/4746004cc4f81&filename=2.jpg', 'http://cfile212.uf.daum.net/image/9999B033599EDE431AEB75', 'https://k.kakaocdn.net/dn/bAT9NC/btq6tTUG4X2/fSLRFyUD0Xn5dw3KkWCOd0/img.png', 'http://cfile205.uf.daum.net/image/991A3E33598E08312939C3', 'http://postfiles10.naver.net/MjAxODA0MTJfMTIw/MDAxNTIzNTMyMDI0MTQy.IazlEIGrTjwsWQ2hroqCIYp5y0sRMQRk7FMkj3bSdxgg.Xslw7oDhpq-HAd5UH9uUwXMIXS5VIAKPLhw9NsnN_pkg.JPEG.zino0011/creative-and-cozy-cat-beds-4-554x408.jpg?type=w966', 'http://imagescdn.gettyimagesbank.com/500/21/480/550/0/1322719077.jpg'] ['https://k.kakaocdn.net/dn/cvuvFC/btq352VsUBO/N8n1t86pk7GLxZk3HEjfm1/img.png', 'http://cfile232.uf.daum.net/image/99D4B033598E09502B118A', 'https://images-na.ssl-images-amazon.com/images/M/MV5BMTY5MTI1MzE5Nl5BMl5BanBnXkFtZTgwMjQzNjEzOTE@._V1_UX182_CR0,0,182,268_AL_.jpg', 'http://imagescdn.gettyimagesbank.com/500/12/452/156/0/154413607.jpg', 'http://cfile208.uf.daum.net/image/140AB13F4EBBCC231C7FF4', 'http://postfiles6.naver.net/20160314_85/feb1992_1457966212670EHAy5_JPEG/funny-pictures-your-cat-is-bursting-with-joy1.jpg?type=w1', 'http://cfile247.uf.daum.net/image/257A303D566AC9D007DCB0', 'https://k.kakaocdn.net/dn/cQ7TTA/btq3PQTYMqu/XjZ0YVbp0CEhk7xkiDwLnk/img.png', 'http://cfile207.uf.daum.net/image/2748F55057B5E5AC1628F2', 'http://cfile269.uf.daum.net/image/224AFD365583C958205E7D', 'http://cfile276.uf.daum.net/image/272953355583C9642BCD64', 'http://cfile264.uf.daum.net/image/21563F3456580736192F5D', 'https://k.kakaocdn.net/dn/HnVnF/btq3k8in2g7/uBK3eRtR0V0rzGD0PPWBZ1/img.png', 'http://cfile252.uf.daum.net/image/21320F4B54BC1F5E2AC850', 'http://imagescdn.gettyimagesbank.com/500/21/958/661/0/1357810001.jpg', 'http://cfile253.uf.daum.net/image/2126AD3652724CF41169B1', 'http://imagescdn.gettyimagesbank.com/500/16/088/209/0/534002900.jpg', 'https://k.kakaocdn.net/dn/diyAqX/btq5apIjPBB/SDQAbzkTOhDklkBgWkWq31/img.png', 'http://cfile216.uf.daum.net/image/2525A44B59233783163FF6', 'http://t1.daumcdn.net/cafeattach/1VCne/c2e11f0119b73afc62b228480579f35500f02d13'] ['https://k.kakaocdn.net/dn/nW8gC/btq2yvyJiS4/3VLSkiKWarzPv65fY1G2X1/img.jpg', 'http://cfile242.uf.daum.net/image/26399A3852724CEF1F003B', 'http://imagescdn.gettyimagesbank.com/500/21/923/905/0/1340658899.jpg', 'http://postfiles4.naver.net/20130714_179/ddong__ko_1373732445771PT2by_PNG/cat_bowtie_model.png?type=w2', 'http://cfile273.uf.daum.net/image/216A5747545E1C1A27A267', 'http://cfile211.uf.daum.net/image/1366DD3F4EBBCC223E12AF', 'https://postfiles.pstatic.net/MjAyMTEyMDVfMTM3/MDAxNjM4NjMzOTI1NzM4.LocBFkzcEC50Hb03Rn5ecGGCsun28skNrcL1ptxpJGAg.XPBJjjVyIMmrCnPngYyrCtL03hS5uxS8BfJeVoUbbBMg.JPEG.yklego2004/Screenshot%EF%BC%BF20211204%EF%BC%8D000458%EF%BC%BFInstagram.jpg?type=w966', 'http://cafe74.daum.net/_c21_/pds_down_hdn?grpid=W1Em&fldid=Sl8b&dataid=22&fileid=1®dt=20040303072031&realfile=%C8%A3%B7%AF.jpg&ln=7&grpcode=hitchdog&dncnt=N&.jpg', 'http://cfile214.uf.daum.net/image/99E97833598E090B2B861A', 'http://postfiles1.naver.net/20140224_208/hjy910730_1393170993156tdoAd_JPEG/Animal-Cat_232.jpg?type=w2', 'http://postfiles7.naver.net/20140610_150/wongj81_1402332780792TL21s_JPEG/600px-boy-and-cat.jpg?type=w2', 'http://imagescdn.gettyimagesbank.com/500/20/040/730/0/1217059948.jpg', 'http://cfile238.uf.daum.net/image/992AEA33598E094C2B02FF', 'http://imagescdn.gettyimagesbank.com/500/21/301/533/0/1313511695.jpg', 'http://cfile256.uf.daum.net/image/24269A4156166F4E348A93', 'http://kr.storage.gettyimagesbank.com/thumb/201907/jv11740169.jpg', 'http://cfile254.uf.daum.net/image/2445404D54BC1F2F1EF6B1', 'https://k.kakaocdn.net/dn/crOiXc/btq16RvrhyK/yLPlPuL7GRuQXAKNwmTfm0/img.png', 'http://cfile225.uf.daum.net/image/99D09033599EDE930DEE73', 'https://k.kakaocdn.net/dn/8mAo2/btq3zojysoc/TqhwFj0Ou1wU5anonkFdO1/img.png'] Traceback (most recent call last): File "C:\repos\drf-project\venv\lib\site-packages\aiohttp\connector.py", line 999, in _create_direct_connection hosts = await asyncio.shield(host_resolved) File "C:\repos\drf-project\venv\lib\site-packages\aiohttp\connector.py", line 865, in _resolve_host addrs = await self._resolver.resolve(host, port, family=self._family) File "C:\repos\drf-project\venv\lib\site-packages\aiohttp\resolver.py", line 31, in resolve infos = await self._loop.getaddrinfo( File "C:\Users\choi\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 855, in getaddrinfo return await self.run_in_executor( File "C:\Users\choi\AppData\Local\Programs\Python\Python310\lib\concurrent\futures\thread.py", line 58, in run result = self.fn(*self.args, **self.kwargs) File "C:\Users\choi\AppData\Local\Programs\Python\Python310\lib\socket.py", line 955, in getaddrinfo for res in _socket.getaddrinfo(host, port, family, type, proto, flags): socket.gaierror: [Errno 11001] getaddrinfo failed The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\repos\drf-project\06-scraping.py", line 50, in <module> asyncio.run(main()) File "C:\Users\choi\AppData\Local\Programs\Python\Python310\lib\asyncio\runners.py", line 44, in run return loop.run_until_complete(main) File "C:\Users\choi\AppData\Local\Programs\Python\Python310\lib\asyncio\base_events.py", line 641, in run_until_complete return future.result() File "C:\repos\drf-project\06-scraping.py", line 45, in main await asyncio.gather(*[fetch(session, url, i) for i, url in enumerate(urls)]) File "C:\repos\drf-project\06-scraping.py", line 37, in fetch await asyncio.gather(*[img_downloader(session, img) for img in image_url]) File "C:\repos\drf-project\06-scraping.py", line 17, in img_downloader async with session.get(img) as response: File "C:\repos\drf-project\venv\lib\site-packages\aiohttp\client.py", line 1117, in __aenter__ self._resp = await self._coro File "C:\repos\drf-project\venv\lib\site-packages\aiohttp\client.py", line 520, in _request conn = await self._connector.connect( File "C:\repos\drf-project\venv\lib\site-packages\aiohttp\connector.py", line 535, in connect proto = await self._create_connection(req, traces, timeout) File "C:\repos\drf-project\venv\lib\site-packages\aiohttp\connector.py", line 892, in _create_connection _, proto = await self._create_direct_connection(req, traces, timeout) File "C:\repos\drf-project\venv\lib\site-packages\aiohttp\connector.py", line 1011, in _create_direct_connection raise ClientConnectorError(req.connection_key, exc) from exc aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host kr.storage.gettyimagesbank.com:80 ssl:default [getaddrinfo failed]
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
localhost8000 접속 에러 관련하여 질문드립니다.
현재 강의까지 순서대로 코드를 작성해왔고, python server.py를 통해서 서버 구동도 성공적으로 완료했습니다. 그런데 "DB와 성공적으로 연결이 되었습니다." 가 출력됨에도 불구하고 localhost:8000 주소로의 접속이 되지 않습니다. (오류 발생가 발생된 이후 모든 코드는 깃헙에 올려주신 코드와 동일하게 맞춰놓았습니다.) ERROR : Exception in ASGI application 아래에 사진 첨부해드립니다. 이 이슈에 대해서 검색을 해봤는데 root CA certificate의 문제와 관련된 것 같습니다. 제가 window를 사용 중이라 발생한 것 같은데 해당 이슈에 대한 도움 주시면 감사드립니다.
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
staticmethod 사용에 대한 추가 질문
안녕하세요? 아래의 문수미님과 같은 궁금함으로 재질문 드립니다. 먼저 이 강의를 통해서 oop 강의까지 병행하여 수강하고 있습니다..! oop 이후 약간의 시리즈같은 느낌으로 강의를 내주신 점에 감사드립니다. 아래 질문 답변에서 인스턴스메소드와 클래스메소드로 사용되지 않는다는 의미가 어떤 것 일까요? feach에서 get(headers=)로 들어가는 HEADERS를 unit_url에서 파싱하지 않고, 인스턴스메소드로 self를 통해 받아도 가능하다 생각이 들어서요..! oop강의의 메소드 내용을 현재 강의에서 활용하고자 하는데, 클래스안에서 메소드를 어떻게 활용해야할 지 고민스러워 질문드립니다..!
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
fetch 함수에 staticmethod 이유
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. fetch 함수에 @staticmethod한 이유가 궁금합니다. 감사합니다.
- 해결됨파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
window 10 환경에서 RuntimeError: Event loop is closed 에러
안녕하세요. 좋은 강의를 통해 많은 배움을 얻어가고 있습니다. 12/14에 bee님께서 남겨주신 질문과 비슷한 에러가 발생하여 질문드립니다. 3-5 강의(오픈 API를 활용한 이미지 데이터 수집)에서 4분30초 즈음의 테스트코드(강의코드와 동일)를 날린 상황에 마찬가지로 RuntimeError: Event loop is closed가 발생하고 있습니다. urls = [f"{BASE_URL}?query={keyword}&display=20&start={i}" for i in range(1, 10)] 코드에서 start의 범위를 1~9, 1~10, 1~11 등으로 변경할 때는 정상 출력되고, 동일한 페이지 범위에 대해 두 번 이상 실행할 때마다 에러가 발생했었습니다.(이것 또한, 때마다 다른 듯한..?) 이유가 무엇일까요..? 특히 요청의 마지막에서 에러가 발생하는 것 같아보였습니다. 예를 들어 start 파라미터로 [1~9] 페이지를 받을 때, 8페이지까지는 받아오는 것으로 보였습니다. 저의 환경은 윈도우10 vscode에서 파이썬3.7.10, aiohttp 3.7.3 버전을 활용하고 있습니다. 또한 한가지 더 문의드릴 사항이.. try, except로 위의 에러 발생에 pass를 해도 pass로 넘어가는 경우도 있고, pass로 넘어가지 않는 경우가 있네요..? (try, except를 메인루틴안에도 넣어보고, fetch함수의 with session 앞에 넣어보기도 했었습니다.) 혹시 async 에서 예외처리하는 방법이 따로 있는지요?
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
with 사용
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. main에서 with를 이용하여 requests.Session()을 열고 닫는 것은 이해했습니다. 다만 fetcher에 들어가서 session.get(url)할 때도 with를 사용했는데 이유가 뭔가요?
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
async 오류
연속 질문 죄송한데... 04-2-coroutine-fetcher.py 파일의 코드를 그대로 실행하면 RuntimeError: Event loop is closed라는 오류가 발생합니다 ㅠㅠ 검색해 보니 윈도우에서 파이썬3.8 이상 환경으로 async 개발을 하면 발생하는 오류라고 하는데 (블로그 출처 : https://gmyankee.tistory.com/330 블로그 하단에 첨부된 해결 코드를 어떻게 사용해야 하는 건지 감이 안잡혀서요.. 블로그에서 링크해 놓은 관련 깃허브를 들어가 봐도 이해가 되지 않아 질문 남깁니다. (깃허브 링크: github.com/encode/httpx/issues/914#issuecomment-622586610) 어떻게 해결 하면 좋을까요? 발생하는 오류 사진 오류와 별개로 아래처럼 print(end - start) 코드가 실행되기는 합니다 (9.579719~~초)
- 미해결파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
asyncio.run 질문
안녕하세요! 대단한 질문은 아니지만... 파이썬 코루틴의 이해 강의 7:49쯤을 보다가 보다가 갑자기 궁금한 점이 생겨서 질문 남깁니다. ================================== def hello_world(): print("서브 루틴") return 123 if __name__ == "__main__": print(hello_world()) ================================== 서브 루틴인 위 함수를 실행시키면 >> 서브 루틴 123 이렇게 프린트값과 return값이 모두 출력되는데 ================================== import asyncio async def hello_world(): print("코루틴") return 123 if __name__ == "__main__": asyncio.run(hello_world()) ================================== 이런 asyncio.run으로 함수를 실행시키면 >> 코루틴 이렇게 아래 123 리턴값은 생략된 채로 출력이 되어서, 왜 리턴은 따로 출력이 안 되는지 궁금합니다! 강의 항상 잘 듣고 있습니다. 감사합니다!
- 해결됨파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
안녕하세요 ~ 파이썬 코루틴 활용 강의에 대해 질문이 있습니다.
안녕하세요. 강의 잘보고 있습니다. request 모듈을 사용할때 session 을 열어 두고 사용하셨는데 세션을 연결하지 않고 사용할때와 세션을 연결하고 사용할때 차이점을 알수 있을까요 ?
- 해결됨파이썬 동시성 프로그래밍 : 데이터 수집부터 웹 개발까지 (feat. FastAPI)
wsgi와 gunicorn 질문
asgi가 나오면서,, 묵혀두었던 wsgi 질문을 해도될까요? http://wsgi.tutorial.codepoint.net/intro 일단 이거에 따르면, api나 서버가 아니라 그저 interface에 불과하다고 되어있습니다.. https://en.wikipedia.org/wiki/Web_Server_Gateway_Interface#:~:text=The%20Web%20Server%20Gateway%20Interface%20(WSGI%2C%20pronounced%20whiskey%5B1%5D%5B2%5D%20or%20WIZ-ghee%5B3%5D)%20is%20a%20simple%20calling%20convention%20for%20web%20servers%20to%20forward%20requests%20to%20web%20applications%20or%20frameworks%20written%20in%20the%20Python%20programming%20language. 즉, 일종의 calling convention이고, gunicorn은 공식문서에 Python WSGI HTTP Server for UNIX 라고 되어있는데, wsgi 규약에 맞춰서 개발된 "서버" 인데, 웹서버와 웹 어플리케이션 사이를 중개하는 서버.이고 (여기서 서버의 의미는 웹클라이언트 요청을 받는 서버가 아니라, 웹서버의 요청을 serve한다는 의미의 서버 인가요?) nginx는 웹서버 소프트웨어로 웹클라이언트의 요청을 받고 처리하는 소프트웨어이다. gunicorn과 같은 wsgi가 필요한 이유는 nginx와 같은 웹서버 소프트웨어가 request가 받고 처리한 결과를, 파이썬으로 작성된 웹 어플리케이션이 해석할 수 있도록 통역(?)해주는 역할을 하는 것인가요?