小编Rob*_*bin的帖子

Scrapy中的记忆泄漏

我编写了以下代码来搜索电子邮件地址(用于测试目的):

import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.selector import Selector
from crawler.items import EmailItem

class LinkExtractorSpider(CrawlSpider):
    name = 'emailextractor'
    start_urls = ['http://news.google.com']

    rules = ( Rule (LinkExtractor(), callback='process_item', follow=True),)

    def process_item(self, response):
        refer = response.url
        items = list()
        for email in Selector(response).re("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}"):

            emailitem = EmailItem()
            emailitem['email'] = email
            emailitem['refer'] = refer
            items.append(emailitem)
        return items
Run Code Online (Sandbox Code Playgroud)

不幸的是,似乎没有正确关闭对请求的引用,就像scrapy telnet控制台一样,请求数量增加了5k/s.在约3分钟和10k刮页后,我的系统开始交换(8GB RAM).任何人都知道出了什么问题?我已经尝试删除引用并使用"复制"字符串

emailitem['email'] = ''.join(email)
Run Code Online (Sandbox Code Playgroud)

没有成功.在抓取之后,这些项目将被保存到BerkeleyDB中,计算它们的出现次数(使用管道),因此之后的引用应该消失.

返回一组物品和分别产生每件物品有什么区别?

编辑:

经过一段时间的调试,我发现,请求没有被释放,这样我最终得到:

$> nc localhost 6023
>>> prefs()
Live References
Request 10344 …
Run Code Online (Sandbox Code Playgroud)

python scrapy web-scraping

5
推荐指数
2
解决办法
2185
查看次数

获取列表中具有最高属性的 n 个元素

我是 Haskell 的新手,正在尝试实现一些遗传算法。目前,我无法选择个体列表中的 n 个最佳元素(其中每个个体都是其自身的列表。个体的创建方式如下:

ind1 :: [Int]
ind1 = [1, 1, 1, 1, 1, 1, 1]
ind2 :: [Int]
ind2 = [0, 0, 0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

适当的群体由这些个体的列表组成:

pop :: [[Int]]
pop = [ind1, ind2]
Run Code Online (Sandbox Code Playgroud)

我想要实现的是获得群体中最好的 n 个个体,其中“最好”是由其元素的总和决定的,例如,

> sum ind1
7
> sum ind2
0
Run Code Online (Sandbox Code Playgroud)

我开始创建一个函数来创建具有个体及其质量的元组:

f x = [(ind, sum ind) | ind <- x]
Run Code Online (Sandbox Code Playgroud)

所以至少我得到了这样的东西:

[([1, 1, 1, 1, 1, 1, 1], 7), ([0, 0, 0, 0, 0, 0, 0], 0)]
Run Code Online (Sandbox Code Playgroud)

我如何从这里得到预期的结果?我什至无法获得“snd == max”元组的“fst”。我从不同主题中看到的递归方法开始,但不幸的是没有合理的结果。有什么建议,可能还有在哪里阅读?谢谢你!

haskell genetic-algorithm

4
推荐指数
2
解决办法
571
查看次数

有效地交叉两个NumPy数组

我想用最少的计算和内存工作交叉(交换索引“ x”处的尾部)两个NumPy数组。目前,我这样做如下:

import numpy as np
a1 = np.zeros(10)
a2 = np.ones(10)
x = np.random.randint(1, a1.size)
a1[:x], a2[:x] = a2[:x].copy(), a1[:x].copy()
Run Code Online (Sandbox Code Playgroud)

有没有办法避免复制语句,无论交叉是否就地完成?谢谢!

python arrays numpy

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

笛卡尔积导致固定长度列表(haskell方式)

我想创建一个固定长度(例如4)的元素序列([0,1]),这样它就会产生一个包含[0,1]所有组合的元素列表列表.

我使用命令式编程方法解决了它:

Prelude > let base = [1, 0]
Prelude > [[x0, x1, x2, x3] | x0 <- base, x1 <- base, x2 <- base, x3 <- base]
[[1,1,1,1],[1,1,1,0],[1,1,0,1], ... [0,0,0,0]]
Run Code Online (Sandbox Code Playgroud)

我认为这是可以改进的.

这样做的惯用方法是什么?

haskell

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

使用make或默认初始化的不同大小的数组

我是Go的新手并尝试理解语言以编写高效的代码.在下面的代码中,两个数组的大小相差140%,有人可以解释一下吗?

package main

import (
    "fmt"
    "unsafe"
)

func main() {
    ind1 := make([]bool, 10)
    var ind2 [10]bool
    fmt.Println(unsafe.Sizeof(ind1)) // 24
    fmt.Println(len(ind1)) // 10
    fmt.Println(unsafe.Sizeof(ind2)) // 10
    fmt.Println(len(ind2)) // 10
}
Run Code Online (Sandbox Code Playgroud)

即使在明确设置容量的情况下,第一个数组的大小仍为10:

    ind1 := make([]bool, 10, 10)
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?使用中是否还有其他开销make?如果是,为什么建议使用make over default initialization?

arrays initialization go slice

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