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
), вы можете скопировать реализацию данных функций в свой код.