
[英]How to copy an existing django object to another table for temporary storage?
[英]How to use temporary storage for objects in Django?
我在Django项目中有一个搜寻器,可以搜寻数千个网址。 每两个小时执行一次爬网。 每秒有多个请求,这可能会使数据库变慢。
这是来自Spider的解析方法:
def parse(self, response):
httpstatus = response.status
url_obj = response.request.meta['url_obj']
xpath = url_obj.xpath
elements = response.selector.xpath(xpath + '/text()').extract()
... EXCEPTIONS ...
Scan.objects.create(url=url, httpstatus=httpstatus,
price=price,
valid=True)
如您所见,我必须在每个请求之后访问数据库(数十秒),但是该数据库也被用户使用。 而且,在完成整个扫描之前,我无法在前端使用这些Scan
对象。
我的想法是为新创建的Scan
对象创建某种中间/临时存储,然后在完成扫描后将它们移动到主数据库。
我怎样才能做到这一点? 你有什么想法?
您可以将Scan
对象累积在一个列表中,然后在准备好它们时bulk_create()它们。 这将大大减少数据库命中次数。
scans = []
....
def parse(self, response):
httpstatus = response.status
url_obj = response.request.meta['url_obj']
xpath = url_obj.xpath
elements = response.selector.xpath(xpath + '/text()').extract()
... EXCEPTIONS ...
scans.append(Scan(url=url, httpstatus=httpstatus,
price=price,
valid=True))
....
Scan.objects.bulk_create(scans)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.