원하는 동작
1,2,3은 각자 비동기를 자기 일을 하고 있으면서 일정 횟수가 되면 작업을 중지 한다. 그리고 나머지가 끝날때까지 대기
그렇게 while문으로 무한대기중이지만
3개의 작업이 모두 종료되어 조건이 일치할 때 나오도록 설계하였습니다.
여기서 문제점은
1,2,3 중에 하나가 작업이 먼저 종료되어 대기중에 있을 때 나머지도 동작을 멈춘다는것입니다.
그 이유는 파이썬은 GIL(Global Interpreter Lock) 한 번에 하나의 스레드만 바이트코드를 실행할 수 있는 조건이라서
해당 스레드 즉, 먼저 작업이 종료된 스레드가 CPU를 점유하고 다른스레드의 자리를 마련할 공간이 없어 계속 멈춘상태로 있는 것입니다.
그러기위해선 sleep을 주어 스레드가 실행될 공간을 마련해 주는 것 입니다. 이렇게 공평하게 자리를 나눠갖게 하는 것이 해결방법이었습니다.
await asyncio.sleep(3)
'Python > crawling' 카테고리의 다른 글
크롤링 관점에서 바라본 Css selector와 Xpath (0) | 2024.05.13 |
---|---|
pyppeteer (goto, click, type) 사용법 (0) | 2024.03.22 |