while문 무한루프가 발생한 이유

2024년 12월 26일 목요일

Today I Learned

날짜

2024년 12월 26일 목요일

내용

무한 루프

인스타그램에서 필요한 데이터들을 가져오는데 상당히 지나치게 오래걸린다. 이게 데이터가 많아서 그런거라고 생각했는데.. 충격적이게도 아주 허무한 코드 오류가 있었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
url = f"https://graph.instagram.com/{instagram_post.post_id}/comments"
params = {
    "access_token": self.instagram_account.access_token,
    "fields": "timestamp,text,from,like_count",
    "limit": 50,
}
response = requests.get(url, params=params)
res_json = response.json()
if "data" in res_json:
    comment_arr += res_json["data"]
while "paging" in res_json and "next" in res_json["paging"]:
    response = requests.get(res_json["paging"]["next"])
    res = response.json()
    if "data" in res:
        comment_arr += res["data"]

이 코드였는데… 댓글이 50개 이상 있을 경우, 다음 페이지에 요청을 지속해서 보내는 반복문이다. 더이상 다음 페이지가 없을 때까지 반복된다. while문 안에서 새로 받아온 데이터를 res_json 이 아닌 res 로 지정해버렸다.. 그래서 res_json 은 최초로 보낸 요청의 것으로 계속 유지되어서 안에 while 문이 유지될 조건이 계속 충족되는 상태였고, 계속 똑같은 요청을 무한대로 보내고 있었다. 바보도 이런 바보가…

회고

그동안 댓글 데이터 일부가 안들어오는 경우가 바로 이게 문제였다.