笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

协同程序

发布者: 笨鸟自学网

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, 2024-11-21 17:36 , Processed in 0.022610 second(s), 17 queries .

© 2001-2020

返回顶部