Scrapy 异步项目管道

标签 scrapy twisted

我正在编写一个项目管道,使用 Pika 将项目放入 RabbitMQ 队列中。目前我正在使用阻塞/同步方法,这显然不是一个好主意。我想使用类似于 this 的异步方法但我不知道如何将延迟任务添加到已经运行的 react 堆中。例如,鼠兔连接的扭曲版本的示例代码显示如下:

d = cc.connectTCP('hostname', 5672)
d.addCallback(lambda protocol: protocol.ready)
d.addCallback(run)
reactor.run() # Problem is, it's already running

有人知道如何将延迟任务添加到已启动的 react 堆吗?

最佳答案

一般来说,在 react 器启动后,您可以使用任何 Twisted API(有一些值得注意的异常(exception),例如 reactor.run ;)。启动某些异步操作的 Twisted API 很乐意针对正在运行的 react 器(而不是尚未启动的 react 器)执行此操作。他们也很乐意针对尚未启动的 react 堆这样做(尽管在 react 堆启动之前几乎不会取得任何进展)。

如果您有一些代码在与 react 器运行相同的线程中运行,您可以只使用 Twisted API(例如您的示例中使用的 ClientCreator.connectTCP;不过,单独使用看一下新的“端点”API,它们基本上在各个方面都比 ClientCreator 更好)并且可以正常工作。

如果它们工作不正常,问题可能是它们没有按照您期望的方式执行,它们报告了您忽略的错误(正如问题中的示例似乎所做的那样) ,或者代码实际上并未在与 react 器相同的线程中运行。

关于Scrapy 异步项目管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26489495/

相关文章:

python蜘蛛返回空json文件

python - 如何使用 Twisted (python) 正确解析请求字符串

python - reactor.iterate 似乎用 Py2exe 阻止了程序

Python装饰器内部调用了错误的函数

python - xpath string() 从渲染中排除特定节点

python - Scrapy FormRequest.from_response() 方法

python - 检测客户端连接到哪个端口

python - 如何可靠地获取twistd生成进程的pid?

python - 了解scrapy框架架构

python - Scrapy 从任何网站获取所有链接