Я создаю приложение, в котором информация о пользователях часто обновляется из внешних API. Для этого я использую django-rq
.
Первая работа запланирована один раз в день, чтобы получить пользователей, которым необходимо обновить свои профили.
Для каждого результата, возвращенного первым заданием, запланируйте другое задание, чтобы получать информацию о новом пользователе из удаленного API и обновлять пользователя в моей базе данных.
# tasks.py
import requests
from django_rq import job
@job('default')
def get_users_to_update():
"""Get a list of users to who need update"""
users = User.objects.filter(some_condition_here...)
return users
@job('default')
def remote_update_user(user):
"""Calls external API to get new user information"""
url = 'http://somwhere.io/api/users/{}'.format(user.id)
headers= {'Authorization': "Bearer {}".format(user.access_token)}
# Send the request, probably takes long time
r = requests.get(url, headers=headers)
data = r.json() # new user data
for key, value in data.items():
setattr(user, key, value)
user.save()
return user
Я могу запланировать эти две работы следующим образом:
# update_info.py
import django_rq
scheduler = django_rq.get_scheduler('default')
scheduler.schedule(
scheduled_time=datetime.utcnow(),
func=tasks.get_users_to_update,
interval=24 * 60 * 60
)
scheduler.schedule(
scheduled_time=datetime.utcnow(),
func=tasks.remote_update_user,
interval=24 * 60 * 60
)
Однако это, конечно, не то, что я хочу. Мне интересно, есть ли способ в django-rq
уведомить о завершении get_users_to_update
, получить его результаты и запланировать remote_update_user
.
rq
позволяет depends_on
объявить зависимое задание отправленным заданием, но кажется, что такая функция недоступна в django-rq
.