我编写了以下代码来搜索电子邮件地址(用于测试目的):
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) 我是 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”。我从不同主题中看到的递归方法开始,但不幸的是没有合理的结果。有什么建议,可能还有在哪里阅读?谢谢你!
我想用最少的计算和内存工作交叉(交换索引“ 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)
有没有办法避免复制语句,无论交叉是否就地完成?谢谢!
我想创建一个固定长度(例如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)
我认为这是可以改进的.
这样做的惯用方法是什么?
我是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?