如何入队一个会运行很长时间的函数?
我想做以下事情:
def batch_insert(数据):
rows.append(MyModel(*data))
如果 len(行) > 1000:
MyModel.objects.bulk_create(行)
最佳答案
确保您在项目的
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", } } } }
在您的应用中创建一个
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()
将您的工作导入到触发它的 View 中
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!")
- 确保将 View 连接到
urls.py
中的 URL 路由
确保您的 RQ worker 正在运行:
$ python manage.py rqworker default
向 View 发送请求,并检查运行 RQ worker 的控制台以查看它是否有效:)
关于Django rq 做批量数据库插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38930271/