小编Hec*_*den的帖子

Scrapy 隐藏的内存泄漏

背景- TLDR:我的项目中有内存泄漏

花了几天时间用scrapy查看内存泄漏文档,但找不到问题。我正在开发一个中等规模的scrapy 项目,每天大约有 4 万个请求。

我使用scrapinghub的预定运行来主持这个。

scrapinghub 上,每月 9 美元,您基本上可以获得 1 个具有 1GB RAM 的 VM 来运行您的爬虫。

我在本地开发了一个爬虫并上传到scrapinghub,唯一的问题是在运行结束时,我超出了内存。

本地化设置CONCURRENT_REQUESTS=16工作正常,但导致超过 50% 点的scrapinghub内存。当我设置 时CONCURRENT_REQUESTS=4,我在 95% 点超过了内存,因此减少到 2 应该可以解决问题,但是我的爬虫变得太慢了。

另一种解决方案是为 2 个 VM 付费以增加 RAM,但我有一种感觉,我设置爬网程序的方式会导致内存泄漏。

对于此示例,该项目将抓取在线零售商。在本地运行时,我的memusage/max是 2.7gb 和CONCURRENT_REQUESTS=16.

我现在将运行我的scrapy结构

  1. 获取要抓取的总页数
  2. 使用以下命令遍历所有这些页面:www.example.com/page={page_num}
  3. 在每个页面上,收集有关 48 种产品的信息
  4. 对于这些产品中的每一个,请转到他们的页面并获取一些信息
  5. 使用该信息,为每个产品直接调用 API
  6. 使用项目管道保存这些(我在本地写入 csv,但不在 scrapinghub 上)
  • 管道
    class Pipeline(object):
        def process_item(self, item, spider):
            item['stock_jsons'] = json.loads(item['stock_jsons'])['subProducts']
            return item
Run Code Online (Sandbox Code Playgroud)
  • 项目
    class mainItem(scrapy.Item):
        date = scrapy.Field()
        url …
Run Code Online (Sandbox Code Playgroud)

python memory scrapy scrapinghub

6
推荐指数
1
解决办法
477
查看次数

R 和 GNU Parallel - 如何限制使用的核心数量

(GNU Parallel 的新功能)

我的目标是在多个核心上运行具有不同参数的相同 Rscript。我的第一个问题是让它在我的笔记本电脑上运行(2 个真实核心,4 个虚拟核心),然后我将其移植到 64 个核心的笔记本电脑上。

现在:

我有一个 Rscript,“Test.R”,它接受参数,做一件事(比如添加一些数字,然后将其写入文件),然后停止。

我有一个“commands.txt”文件,其中包含以下内容:

/Users/name/anaconda3/lib/R/bin/Rscript Test.R 5 100 100
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 5 100 1000
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 5 100 1000
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 5 100 1000
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 50 100 1000
/Users/name/anaconda3/lib/R/bin/Rscript Test.R 50 200 1000
Run Code Online (Sandbox Code Playgroud)

所以这告诉GNU并行使用R运行Test.R(我已经使用anaconda安装了它)

在终端中(导航到 Test.R 和 Commands.txt 所在的桌面后),我使用以下命令:

parallel --jobs 2 < commands.txt
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用 2 个核心,并运行commands.txt 中的命令,直到所有任务完成。(我尝试过此命令的变体,例如将 2 更改为 1,在这种情况下,其中 2 个核心以 100% 的速度运行,另外 2 个核心以 20-30% 的速度运行)。

当我运行此命令时,所有 4 个核心都达到 100%(从 htop 可以看出),并且前 2 个作业完成,并且没有更多作业完成,尽管所有 4 个核心仍处于 100%。 …

r gnu-parallel anaconda

5
推荐指数
1
解决办法
3980
查看次数

长变量名是否会降低r的性能?

例如,如果在运行数百万次试验的函数中,以下两种运行速度会不同.

the.name.of.a.random.variable.in.r <- some.value

variable <- some.value
Run Code Online (Sandbox Code Playgroud)

然后扩展这个如何与函数名称相关.

variables performance r

4
推荐指数
1
解决办法
89
查看次数

如何从向量中删除多个值?但不是全部

说我有两个向量,

set <- c(1, 1, 1, 1, 3, 3, 4, 4, 8, 8, 10)
played <- c(1, 3, 1, 4)
Run Code Online (Sandbox Code Playgroud)

我想删除原始集中的"播放"数字,我不想删除所有的1,3或4.这样得到的矢量应该是,

1,1,3,4,8,8,10
Run Code Online (Sandbox Code Playgroud)

目前我正在使用循环,但这不是一个非常有效的方法.有功能可以做我想要的.

注意:这不是重复 如何从向量中删除多个值? 而是一个扩展,所有关于不删除所有值.

重新编辑:我说订单很重要,但我错了.

r

3
推荐指数
1
解决办法
140
查看次数

除了一个函数之外加载一个包

我想加载除了一个函数之外的整个包。

我看到了解决方法,例如如何从包中仅加载特定函数 ,但这并不能满足我的全部需求。

具体问题是使用加载 MASS 和 tidyverse 包中的 select() 函数,但我想要一个更通用的解决方案。

谢谢。

r

2
推荐指数
1
解决办法
712
查看次数