2016-08-13 1 views
1

Как я могу запустить функцию, которая будет работать долго?Django rq to do batch db insert

Я хочу сделать следующее:

def batch_insert(data): rows.append(MyModel(*data)) if len(rows) > 1000: MyModel.objects.bulk_create(rows)

ответ

0
  1. Убедитесь, что у вас установлено 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", 
          } 
         } 
        } 
    } 
    
  2. Создать 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() 
    
  3. Импортируйте свою работу в целях, что вызывает его

    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!") 
    
  4. Убедитесь, что вы подключить вид на маршрут URL в вашем urls.py
  5. Убедитесь, что ваши работники RQ работают:

    $ python manage.py rqworker default 
    
  6. Отправить мнение, запрос и проверьте консоль работает рабочие RQ, чтобы убедиться, что это сработало :)

Смежные вопросы