繁体   English   中英

如何在Django中为对象使用临时存储?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM