Crontab 적용!

오늘의 딜이라는 시간에 따라 상품의 정보가 변동되는 데이터를 위해 crontab을 적용했다.

적용하기 전에 방법은 다음과 같았다.

  • 상품 중에 4개를 랜덤으로 뽑기 위해 랜덤 숫자를 저장하는 모델을 만들었다.
  • 모델이 업데이트가 되면 날짜도 업데이트되도록 DateField를 만들었다(auto_now = True).
  • date 모듈을 이용해서 오늘 날짜를 받는다.
  • 오늘 날짜와 모델의 날짜를 비교해서 랜덤 숫자를 업데이트한다.
  • 상품의 Query에서 랜덤 숫자를 이용해 골라낸다.

하지만 문제는 클라이언트에서 요청할 때 이 로직이 수행되는 것이고, 또 요청할 때마다 수행된다는 것이다.

그래서 django-crontab을 적용하여 다음과 같이 작업 함수를 만들었다.

1
2
3
4
5
6
7
8
9
def products_todaydeal():
myList = []
num = random.randrange(1, 181)

for i in range(1, 5):
while num in myList:
num = random.randrange(1, 181)
myList.append(num)
HotDealNumber(id=i, product_rnd_number=num).save()

그리고 settings.py에 작업을 등록했다.

1
2
3
CRONJOBS = [
('0 0 * * *', 'products.cron.products_todaydeal'),
]

로컬에서는 1분마다 테스트하게 해서 동작을 확인한 뒤, 서버에 배포했다.

동작하는지 지켜봐야지.

Share