如何使一个函数长时间运行?
我想做以下事情:
def batch_insert(data):
rows.append(MyModel(*data))
if len(rows) > 1000:
MyModel.objects.bulk_create(rows)
-
确保你已经在项目的
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()
-
将作业导入到触发作业的视图
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 worker正在运行:
$ python manage.py rqworker default
向视图发送请求,并检查运行RQ worker的控制台是否工作:)