4

我正在构建一个应用程序,其中用户的信息经常从外部 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.

4

0 回答 0