假设我在表格中有1000个user_ids,我会每小时运行一次,以获取Google API信息并更新该表格中的3个字段。影响将如何以及如何有效地完成?
我见过这个变种:
m = Module.objects.get(user_id=1).update(field_one=100, field_two=200, field_three=300)
这一个:
m = Module.objects.get(user_id=1)
m.field_one = 100
m.field_two = 200
m.field_three = 300
m.save()
还有怎样才能让它每小时运行一次并获取信息?从来没有做过这样的事情。
答案 0 :(得分:2)
使用Redis,Celery每小时设置异步任务队列。有关如何为django设置asych任务队列系统的更多信息,请查看https://realpython.com/blog/python/asynchronous-tasks-with-django-and-celery/。
以下是tasks.py
from celery.task import periodic_task
from celery.schedules import crontab
@periodic_task(run_every=crontab(minute=0, hour='*/1'))
def get_data_from_google_api():
data_from_google =ping_google_api() # ping google api to get data
return Module.objects.get(user_id=1).update(field_one= data_from_google['field_one'], field_two= data_from_google['field_two'], field_three= data_from_google['field_three'])
点击此处了解更多信息:
答案 1 :(得分:1)
为此,您需要定期执行背景查询 这是django task-queue-libs中最受欢迎的 例如,如果您决定使用celery,则可以编写简单的定期任务:
from celery.schedules import crontab
from celery.task import periodic_task
@periodic_task(
name='UPDATE_USER',
run_every=crontab(
minute='1',
hour='1,4,7,10,13,16,19,22'))
def update_user():
#get some value from api
Module.objects.filter(user_id=1).update(
field_one=value, field_two=value, field_three=value)
django的所有设置,您可以查看celery docs