CDW (Coding Discussion World)
python - random을 활용해서 load 분배, 원하는 비율만큼 함수 실행 본문
반응형
이번편은 random.choice를 활용한 load 분배를 해보려고 한다.
X라는 리스트에 네이버, 카카오, 구글이 있다고 가정했을 때 랜덤한 값을 뽑으러면 random.choice(X)를 하면 된다.
그런데 네이버, 카카오, 구글을 5:3:2의 비율로 뽑고 싶다면 어떻게 하면 될까?
방법이야 많겠지만 아래처럼도 할 수 있다.
우선 주소 옆에 capa(비율)을 설정해보자.
import random
url = [
['네이버',5],
['카카오',3],
['구글',2],
]
그 뒤에 url_total 이라는 변수를 만들고 미리 지정한 숫자만큼 변수에 데이터를 담는다
url_total = []
for i in url:
for j in range(0,i[1]):
url_total.append(i[0])
print(url_total)
그렇게 되면 새로 생성한 url_total이라는 변수에는 앞에서 설정한 capa(비율)만큼 데이터가 담기게 된다.
['네이버', '네이버', '네이버', '네이버', '네이버', '카카오', '카카오', '카카오', '구글', '구글']
그런 다음에 random.choice를 사용하면 원하는 비율로 랜덤한 값을 선택할 수 있다.
print(random.choice(url_total))
그렇다면 정말 비율대로 선택하는지 확인하기 위해 아래처럼 반복문을 돌려보고 count를 측정해보자.
total_cnt = []
for i in range(100):
url = [
['네이버',5],
['카카오',3],
['구글',2],
]
url_total = []
for i in url:
for j in range(0,i[1]):
url_total.append(i[0])
total_cnt.append(random.choice(url_total))
print(total_cnt.count("네이버"))
print(total_cnt.count("카카오"))
print(total_cnt.count("구글"))
그래도 처음 설정한 5:3:2 비율과 비슷하게 나왔다. (횟수를 1000번으로 하면 조금 더 비율에 맞게 수렴한다.)
49
30
21
이번에는 미리 설정한 비율만큼 함수를 돌리고 싶다면 어떻게 할까? 방법이야 많겠지만 이런 방법을 어떠할까?
random.randint를 통해서 원하는 int를 만들고 if 함수를 줘서 원하는 비율을 선택할 수 있다.
import random
persent_value = random.randint(0,10)
if persent_value < 2 :
print(1)
elif persent_value < 6 :
print(2)
else :
print(3)
잘 되는지 아까와 같은 방식으로 검증해보자.
import random
total_cnt = []
for i in range(1000):
persent_value = random.randint(1,10)
if persent_value < 6 :
total_cnt.append('첫번째함수')
elif persent_value < 9 :
total_cnt.append('두번째함수')
else :
total_cnt.append('세번째함수')
print(total_cnt.count("첫번째함수"))
print(total_cnt.count("두번째함수"))
print(total_cnt.count("세번째함수"))
함수가 대략 5:3:2 정도의 비율로 실행된 것을 알 수 있다.
498
298
204
뭐 더 좋은 방법도 많겠지만 문득 떠오른 방법은 이것이다.
끝!
반응형
'Python > Do something' 카테고리의 다른 글
python(selenium) - 대표 포털 사이트(네이버,구글,daum,zum,bing) 자동 검색하기 (0) | 2023.01.15 |
---|---|
python(selenium) - 크롤링 기본 사용법 (2) | 2023.01.13 |
python(requests) - kakao api를 통해 data 받아와서 db에 저장하기 (3) (1) | 2023.01.08 |
python(requests) - kakao api를 통해 data 받아와서 db에 저장하기 (2) (0) | 2023.01.08 |
python(requests) - kakao api를 통해 data 받아와서 db에 저장하기 (1) (0) | 2023.01.08 |