1
長時間実行される関数をどのようにエンキューできますか?Django rq to batch db insert
私は次の操作を実行したい:
def batch_insert(data): rows.append(MyModel(*data)) if len(rows) > 1000: MyModel.objects.bulk_create(rows)
長時間実行される関数をどのようにエンキューできますか?Django rq to batch db insert
私は次の操作を実行したい:
def batch_insert(data): rows.append(MyModel(*data)) if len(rows) > 1000: MyModel.objects.bulk_create(rows)
あなたはdjango-rq
アプリがインストールされ、プロジェクトのsettings.py
に登録されていることを確認します。仕事であなたがエンキューしたいのですが、
CACHES = {
...
{
"jobs": {
"BACKEND" : "django_redis.cache.RedisCache",
"LOCATION" : "{{YOUR REDIS SERVER ADDRESS}}",
"OPTIONS" : {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
}
アプリでjobs.py
ファイルを作成します。また、次の設定セットが必要になります。
RQ_QUEUES = {
"default" : { "USE_REDIS_CACHE" : "jobs" },
}
をし、あなたのCACHES
設定に追加された次の:
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()
それ
をトリガービューにあなたの仕事をインポートビューにリクエストを送信し、コンソールの実行を確認する$ python manage.py rqworker default
:
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
にURLルートにビューをフックを確認してくださいそれが働いたかどうかを確認するRQ作業者:)