asyncio

Добавлено в версии 2.0.

Scrapy частично поддерживает asyncio. После установки asyncio реактора вы можете использовать библиотеки на основе asyncio и asyncio в любой корутине.

Предупреждение

Поддержка asyncio в Scrapy является экспериментальной и пока не рекомендуется для производственных сред. В будущих версиях Scrapy могут быть внесены соответствующие изменения без периода прекращения поддержки или предупреждения.

Установка реактора asyncio

Чтобы включить поддержку asyncio, устанавливает для параметра TWISTED_REACTOR значение 'twisted.internet.asyncioreactor.AsyncioSelectorReactor'.

Если вы используете CrawlerRunner, вам также необходимо установить реактор AsyncioSelectorReactor вручную. Вы можете сделать это с помощью install_reactor():

install_reactor('twisted.internet.asyncioreactor.AsyncioSelectorReactor')

Использование пользовательских циклов asyncio

Вы также можете использовать пользовательские событийные циклы asyncio с реактором asyncio. Задаёт для параметра ASYNCIO_EVENT_LOOP путь импорта желаемого класса событийного цикла, чтобы использовать его вместо событийного цикла asyncio по умолчанию.

В ожидании отложенных

Когда асинхронный реактор не установлен, вы можете напрямую ожидать отложенных вызовов в корутинах. Когда он установлен, это больше невозможно из-за специфики интеграции корутин Scrapy (корутины обёртываются в объекты asyncio.Future, а не напрямую в Deferred), и вам нужно обернуть их во Futures. Scrapy предоставляет для этого два помощника:

Совет

Если вам нужно использовать данные функции в коде, который нацелен на совместимость с более низкими версиями Scrapy, которые не предоставляют данные функции, вплоть до Scrapy 2.0 (более ранние версии не поддерживают asyncio), вы можете скопировать реализацию данных функций в свой код.