将结果推送到另一个工作django-rq

时间:2018-05-07 04:49:26

标签: django scheduled-tasks job-scheduling django-rq

我正在构建一个应用程序,其中用户的信息经常从外部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-rqget_users_to_update完成时是否有任何方式通知,获取结果并安排remote_update_user

rq允许depends_on将相关作业声明为已提交的作业,但django-rq似乎无法使用此类功能。

0 个答案:

没有答案