1
如何排隊一個會運行很長時間的函數?Django rq做批量db插入
我要做到以下幾點:
def batch_insert(data): rows.append(MyModel(*data)) if len(rows) > 1000: MyModel.objects.bulk_create(rows)
如何排隊一個會運行很長時間的函數?Django rq做批量db插入
我要做到以下幾點:
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工作人員看看它是否有效:)