Scrapy – 如何pipe理Cookie /会话

对于Scrapy如何使用Cookie以及如何pipe理这些Cookie,我有点困惑。 这基本上是我想要做的简化版本: 网站的工作方式: 当你访问网站时,你会得到一个会话cookie。 当你进行search时,网站会记住你search的内容,所以当你进入下一页的search结果时,它会知道search结果。 我的脚本: 我的蜘蛛有一个searchpage_url的开始url search页面被parse()请求,search表单响应被传递给search_generator() search_generator()然后使用FormRequest和search表单响应yield大量的search请求。 每个FormRequests和后续的子请求都需要拥有它自己的会话,所以需要拥有它自己的cookiejar和它自己的会话cookie。 我已经看到文档的部分,谈论一个元选项,停止被合并的Cookie。 这实际上是什么意思? 这是否意味着使请求的蜘蛛在其余生命中将拥有自己的cookiejar? 如果每个蜘蛛级别的cookie都是这样的,那么当多个蜘蛛产生时它是如何工作的? 是否有可能只让第一个请求生成器产生新的蜘蛛,并确保从那时起只有蜘蛛处理未来的请求? 我假设我必须禁用多个并发请求。否则,一个蜘蛛会在相同的会话cookie下进行多次search,而将来的请求只会涉及到最近的search? 我很困惑,任何澄清将大受欢迎! 编辑: 我刚刚想到的另一个选项是完全手动pipe理会话cookie,并将其从一个请求传递给另一个。 我想这将意味着禁用cookies ..然后从search响应抓取会话cookie,并将其传递给每个后续请求。 这是你在这种情况下应该做的吗?

在Haskell中优化数组的性能

我正在研究类似MineCraft的世界的地形生成algorithm。 目前,我正在使用Simplex Noise Demystified(PDF)中的实现方法来使用单工噪声,因为单纯的噪声应该比Perlin噪声更快并且产生更less的伪像。 这看起来相当不错(见图片),但到目前为止,它也很慢。 对于块(16x16x128块)中的每个块运行噪声函数10次(对于地形高度,温度,树木位置等,我需要具有不同波长的噪声),每个块有3个八度的噪声,或者大约100万次调用噪声function总共大约需要700-800毫秒。 尽pipe事实上在algorithm中没有明显的昂贵的操作(至less对我来说),但对于产生具有任何体面的速度的地形而言,这至less是一个数量级太慢的速度。 只是楼,模,一些数组查找和基本的算术。 下面列出了algorithm(用Haskell编写)。 SCC的意见是为了分析。 我省略了二维噪声function,因为它们的工作方式是一样的。 g3 :: (Floating a, RealFrac a) => a g3 = 1/6 {-# INLINE int #-} int :: (Integral a, Num b) => a -> b int = fromIntegral grad3 :: (Floating a, RealFrac a) => V.Vector (a,a,a) grad3 = V.fromList $ [(1,1,0),(-1, 1,0),(1,-1, 0),(-1,-1, […]

有没有一个无效的pthread_t编号?

我想调用pthread_join给定的线程ID,但只有当该线程已经启动。 安全的解决scheme可能是添加一个variables来跟踪哪个线程开始或不开始。 不过,我不知道检查pthread_tvariables是可能的,像下面的代码。 pthread_t thr1 = some_invalid_value; //0 ? pthread_t thr2 = some_invalid_value; /* thread 1 and 2 are strated or not depending on various condition */ …. /* cleanup */ if(thr1 != some_invalid_value) pthread_join(&thr1); if(thr2 != some_invalid_value) pthread_join(&thr2); 其中some_invalid_value可以是0,或者一个实现依赖的“PTHREAD_INVALID_ID”macros PS:我的假设是,pthread_ttypes是可比的,可分配的,假设基于 PPS:我想这样做,因为我认为调用无效的线程ID pthread_join是undefinde行为。 不是这样。 但是,join之前join的线程是未定义的行为。 现在让我们假设重复调用上面的“function”。 无条件地调用pthread_join并检查结果可能会导致在以前连接的线程上调用pthread_join。

Java中的匿名类和闭包有什么区别?

它看起来像匿名类提供了闭包的基本function,是真的吗?

OneToMany的学说Cascade选项

我很难理解Doctrine手册中有关级联操作的解释 ,需要有人帮助我理解简单的ManyToOne关系的选项。 在我的应用程序中,我有一个名为Article的表/实体,它有一个外键字段,引用名为Topic的表/实体中的“id”字段。 当我创build一个新的文章,我从下拉菜单中select主题。 这会在文章表中的“topic_id”外键字段中插入一个整数。 我在Article实体中设置了$ topic关联,如下所示: /** * @ManyToOne(targetEntity="Topic") * @JoinColumn(name="topic_id", referencedColumnName="id", nullable=false) */ private $topic; Topic主题实体没有任何关于Article实体的相互注释。 主题不关心什么文章引用它们,当引用该主题的文章被删除时什么都不需要发生在主题上。 因为我没有在Article实体中指定级联操作,所以当我尝试创build一个新的Article时,Doctrine会抛出一个错误:“通过未configuration为级联持久化操作的关系find新的实体。显式地坚持新的实体或者在关系上configuration级联持久化操作。“ 所以我知道我需要select一个级联操作来包含在Article实体中,但是我怎么知道在这种情况下select哪个操作呢? 从阅读教义手册,“分离”听起来像是正确的select。 但是在这里和这里研究别人的类似问题让我觉得我想用“坚持”来代替。 任何人都可以帮助我理解什么“坚持”,“删除”,“合并”和“分离”意味着就像我所描述的一个简单的ManyToOne关系?

在pandas 0.10.1上使用pandas.read_csv指定dtype float32

我试图用pandas read_csv方法读取一个简单的空格分隔的文件。 不过,pandas似乎并不服从我的dtype论点。 也许我不正确地指定它? 我将这个简单的testing用例简化为read_csv 。 我实际上在我的“真实”场景中使用了converters参数,但为了简单起见,我将其删除了。 以下是我的ipython会话: >>> cat test.out ab 0.76398 0.81394 0.32136 0.91063 >>> import pandas >>> import numpy >>> x = pandas.read_csv('test.out', dtype={'a': numpy.float32}, delim_whitespace=True) >>> x ab 0 0.76398 0.81394 1 0.32136 0.91063 >>> xadtype dtype('float64') 我也尝试过使用numpy.int32或numpy.int64 。 这些select导致一个例外: AttributeError: 'NoneType' object has no attribute 'dtype' 我假设AttributeError是因为pandas不会自动尝试转换/截断浮点值为一个整数? 我正在32位机器上运行一个32位版本的Python。 >>> !uname […]

我需要在C程序中编译头文件吗?

有时候我看到有人编译一个像这样的C程序: gcc -o hello hello.c hello.h 据我所知,我们只需要把头文件放到C程序中就好: #include "somefile" 并编译C程序: gcc -o hello hello.c 。 我们什么时候需要编译头文件或者为什么?

RyuJit产生不正确的结果

在最近升级到.net 4.6之后,我们发现了一个错误,RyuJit产生了不正确的结果,现在我们可以通过在app.config中添加useLegacyJit enabled =“true”来解决这个问题。 我怎样才能debugging由以下产生的机器码? 我在VS 2015 RTM中创build了一个新的控制台项目,设置为释放,任何CPU,未选中首选32位,运行有和没有debugging器连接产生相同的结果。 using System; using System.Runtime.CompilerServices; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Console.WriteLine(Calculate()); Console.WriteLine(Calculate()); Console.ReadLine(); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Value Calculate() { bool? _0 = (bool?)null; bool? _1 = (bool?)true; if (!Value.IsPresent<bool>(_1)) { return default(Value); } bool? result = null; result = (_1.Value ? […]

有一种方法可以在C中进行curl吗?

假设我有一个指向函数_stack_push(stack* stk, void* el)的指针。 我希望能够调用curry(_stack_push, my_stack)并取回一个只需要void* el的函数。 我想不出有办法做到这一点,因为C不允许运行时函数的定义,但我知道在这里有比我更聪明的人:)。 有任何想法吗?

有没有办法使用CSS将较长的数字(“$ 100000000”)分成更易读的三元组(“$ 100 000 000”)?

我有一个有很多大数值的页面。 数百万和数十亿美元无处不在。 而且很难读懂这些数字,所以我的客户要求我把它们分成三个符号,“$ 100000000”=>“$ 1亿”。 这是完全合理的要求,但问题是,我不想在服务器端做到这一点,我不想用JavaScript做到这一点。 你看,我已经有一大堆javascript已经在这个页面上运行,对这些长数字进行复杂的计算,并且在从页面读取数据的每个位置插入一个parseReadableStringToInteger() ,并且将一个writeIntegerAsReadableString()在每个把结果写回页面的地方。 所以,我正在考虑使用CSS将长string显示为一组短的块。 我的第一个想法是-moz-column和-webkit-column ,但不幸的是,他们只能使用已经被空格分开的单词。 也许有另一种方式? 任何build议,欢迎。 ps跨浏览器兼容性不是必需的。 我可以和Gecko和/或Webkit一起使用。