我正在构建一个应用程序,其中用户的信息经常从外部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
似乎无法使用此类功能。