找回密码
 立即注册

协同程序

2022-2-21 06:32| 发布者: 笨鸟自学网| 查看: 2217| 评论: 0

摘要: 2.0 新版功能.刮痧partial support对于coroutine syntax.支持的可调用项¶以下可调用项可以定义为使用asyncdef,因此使用协同程序语法(例如。await,asyncfor,asyncwith):Request回电。注解在整个回调完成之前, ...

2.0 新版功能.

刮痧 partial support 对于 coroutine syntax .

支持的可调用项

以下可调用项可以定义为使用 async def ,因此使用协同程序语法(例如。 await , async for , async with ):

  • Request 回电。

    注解

    在整个回调完成之前,不会处理回调输出。

    作为副作用,如果回调引发异常,则不会处理其任何输出。

    这是对当前实现的一个已知警告,我们将在Scrapy的未来版本中解决这个问题。

  • 这个 process_item() 方法 item pipelines .

  • 这个 process_request() , process_response() 和 process_exception() 方法 downloader middlewares .

  • Signal handlers that support deferreds .

使用

Scrapy中有几个协同程序的用例。在为以前的垃圾版本(如下载程序中间件和信号处理程序)编写时,会返回延迟的代码可以重写为更简短、更干净:

from itemadapter import ItemAdapter

class DbPipeline:
    def _update_item(self, data, item):
        adapter = ItemAdapter(item)
        adapter['field'] = data
        return item

    def process_item(self, item, spider):
        adapter = ItemAdapter(item)
        dfd = db.get_some_data(adapter['id'])
        dfd.addCallback(self._update_item, item)
        return dfd

变成::

from itemadapter import ItemAdapter

class DbPipeline:
    async def process_item(self, item, spider):
        adapter = ItemAdapter(item)
        adapter['field'] = await db.get_some_data(adapter['id'])
        return item 

12下一页
上一篇:作业:暂停和恢复爬行下一篇:asyncio

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2025-8-30 17:45 , Processed in 0.022547 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2017 Discuz Team. Template By 【未来科技】【 www.wekei.cn 】

返回顶部