如何将运行很长时间的函数排入队列?
我想做以下事情:
def batch_insert(data):
rows.append(MyModel(*data))
if len(rows) > 1000:
MyModel.objects.bulk_create(rows)
如何将运行很长时间的函数排入队列?
我想做以下事情:
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 工作人员的控制台以查看它是否工作 :)