gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:49:37 25 4
gpt4 key购买 nike

我在 Django 项目中有一个爬虫,它可以爬取数千个 url。爬行每两个小时进行一次。每秒有多个请求,这会降低数据库速度。

这是蜘蛛的解析方法:

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)

关于python - 如何在 Django 中为对象使用临时存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46393692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com