Django rq做批处理数据库插入



如何使一个函数长时间运行?

我想做以下事情:

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

  1. 确保你已经在项目的settings.py中安装并注册了django-rq应用程序。您还需要以下设置集:

    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. 确保你在urls.py
  5. 中将视图连接到URL路由
  6. 确保你的RQ worker正在运行:

    $ python manage.py rqworker default
    
  7. 向视图发送请求,并检查运行RQ worker的控制台是否工作:)

最新更新