Как я могу запустить функцию, которая будет работать долго?Django rq to do batch db insert
Я хочу сделать следующее:
def batch_insert(data): rows.append(MyModel(*data)) if len(rows) > 1000: MyModel.objects.bulk_create(rows)
Как я могу запустить функцию, которая будет работать долго?Django rq to do batch db insert
Я хочу сделать следующее:
def batch_insert(data): rows.append(MyModel(*data)) if len(rows) > 1000: MyModel.objects.bulk_create(rows)
Убедитесь, что у вас установлено django-rq
приложения и зарегистрировано в вашем проект settings.py
. Вам также потребуется следующий набор настроек:
RQ_QUEUES = {
"default" : { "USE_REDIS_CACHE" : "jobs" },
}
и следующие добавлены к вашему CACHES
настройки:
CACHES = {
...
{
"jobs": {
"BACKEND" : "django_redis.cache.RedisCache",
"LOCATION" : "{{YOUR REDIS SERVER ADDRESS}}",
"OPTIONS" : {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
}
Создать jobs.py
файл в приложении, с работой вы хотели бы епдиеие :
from myapp.models import MyModel
from django_rq import job
@job
def batch_insert(data):
rows = []
rows.append(MyModel(*data))
if len(rows) > 1000:
MyModel.objects.bulk_create(rows)
else:
for row in rows:
row.save()
Импортируйте свою работу в целях, что вызывает его
from myapp.jobs import batch_insert
trigger_batch_insert(request):
sample_data = # Define your data here
batch_insert.delay(sample_data) # This runs the job, instead of
# running it synchronously
return HttpResponse("Job running!")
urls.py
Убедитесь, что ваши работники RQ работают:
$ python manage.py rqworker default
Отправить мнение, запрос и проверьте консоль работает рабочие RQ, чтобы убедиться, что это сработало :)