У меня есть приложение FastAPI + TaskIQ + Scrapy.
Когда я вызываю определенную конечную точку, вызывается задача, которая запускает паука. Я использую Motor в качестве движка БД, поэтому хочу, чтобы Scrapy был совместим с asyncio. Я в точности следовал документации по Scrapy.
Когда мой паук запускается, мой Scrappy.settings.TWISTED_REACTOR имеет вид 'twisted.internet.asyncioreactor.AsyncioSelectorReactor' > и сам витой реактор принадлежит к тому же классу.
Мои приложения FastAPI и TaskIQ инициализируются следующим образом:
from fastapi import FastAPI
from scrapy.utils.reactor import install_reactor
from myproject.broker import broker
...
@asynccontextmanager
async def lifespan(_):
if not broker.is_worker_process:
await broker.startup()
else:
install_reactor('twisted.internet.asyncioreactor.AsyncioSelectorReactor')
yield
if not broker.is_worker_process:
await broker.shutdown()
...
Вы можете видеть, что только рабочий устанавливает реактор, и что это делается при загрузке.
Моя конечная точка просто публикует сообщение брокер, который затем обрабатывается TaskiQ
@broker.task
async def run_spider() -> None:
await maybe_deferred_to_future(crawler_runner.crawl(DummySpider))
Мой паук
import logging
from scrapy import Spider, Request, settings
from myproject.scrapers import settings
from myproject.scrapers.items.generic import GenericItem
LOGGER = logging.getLogger("uvicorn")
class DummySpider(Spider):
name = 'DummySpider'
def start_requests(self) -> Request:
LOGGER.info("!!!!!!!!!!!!!!!!!!!!!!!!!! run start_requests")
from twisted.internet import reactor
LOGGER.info(f'reactor_class: {reactor.__class__}')
LOGGER.info(f'scrapy_twisted_reactor: {settings.TWISTED_REACTOR}')
yield Request('https://google.com', dont_filter=True)
async def parse(self, _, **kwargs) -> GenericItem:
LOGGER.info("!!!!!!!!!!!!!!!!!!!!!!!!!! run parse")
item = GenericItem()
item['id'] = 42
yield item
С этого момента вся ветка Taskiq зависает. В журналах написано:
2024-12-02T17:05:30.959738317Z [2024-12-02 17:05:30,959][scrapy.core.engine][INFO ][worker-0] Spider opened
2024-12-02T17:05:30.962073516Z [2024-12-02 17:05:30,961][scrapy.extensions.logstats][INFO ][worker-0] Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2024-12-02T17:05:30.962425736Z [2024-12-02 17:05:30,962][scrapy.extensions.telnet][INFO ][worker-0] Telnet console listening on 127.0.0.1:6023
2024-12-02T17:05:30.962433949Z [2024-12-02 17:05:30,962][uvicorn][INFO ][worker-0] !!!!!!!!!!!!!!!!!!!!!!!!!! run start_requests
2024-12-02T17:05:30.962436121Z [2024-12-02 17:05:30,962][uvicorn][INFO ][worker-0] reactor_class:
2024-12-02T17:05:30.962501235Z [2024-12-02 17:05:30,962][uvicorn][INFO ][worker-0] scrapy_twisted_reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor
2024-12-02T17:06:30.963036521Z [2024-12-02 17:06:30,962][scrapy.extensions.logstats][INFO ][worker-0] Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
Если отправляется сигнал перезапуска, он фиксируется tasiq, но сброс никогда не происходит, поскольку задача зависает:
[2024-12-02 17:08:46,612][taskiq.process-manager][INFO ][MainProcess] Scheduled workers reload.
2024-12-02T17:08:47.402671790Z [2024-12-02 17:08:47,402][taskiq.receiver.receiver][INFO ][worker-0] Stoping prefetching messages...
2024-12-02T17:08:47.402696006Z [2024-12-02 17:08:47,402][taskiq.receiver.receiver][INFO ][worker-0] Waiting for 1 running tasks to complete...
Я не вижу, что не так с моей конфигурацией, я совершенно не могу заставить это работать
scrapy.__version__
'2.12.0'
twisted.__version__
'24.11.0'
Подробнее здесь: https://stackoverflow.com/questions/792 ... and-scrapy
Невозможно интегрировать asyncio и Scrapy ⇐ Python
Программы на Python
1733159635
Anonymous
У меня есть приложение FastAPI + TaskIQ + Scrapy.
Когда я вызываю определенную конечную точку, вызывается задача, которая запускает паука. Я использую Motor в качестве движка БД, поэтому хочу, чтобы Scrapy был совместим с asyncio. Я в точности следовал документации по Scrapy.
Когда мой паук запускается, мой Scrappy.settings.TWISTED_REACTOR имеет вид 'twisted.internet.asyncioreactor.AsyncioSelectorReactor' > и сам витой реактор принадлежит к тому же классу.
Мои приложения FastAPI и TaskIQ инициализируются следующим образом:
from fastapi import FastAPI
from scrapy.utils.reactor import install_reactor
from myproject.broker import broker
...
@asynccontextmanager
async def lifespan(_):
if not broker.is_worker_process:
await broker.startup()
else:
install_reactor('twisted.internet.asyncioreactor.AsyncioSelectorReactor')
yield
if not broker.is_worker_process:
await broker.shutdown()
...
Вы можете видеть, что только рабочий устанавливает реактор, и что это делается при загрузке.
Моя конечная точка просто публикует сообщение брокер, который затем обрабатывается TaskiQ
@broker.task
async def run_spider() -> None:
await maybe_deferred_to_future(crawler_runner.crawl(DummySpider))
Мой паук
import logging
from scrapy import Spider, Request, settings
from myproject.scrapers import settings
from myproject.scrapers.items.generic import GenericItem
LOGGER = logging.getLogger("uvicorn")
class DummySpider(Spider):
name = 'DummySpider'
def start_requests(self) -> Request:
LOGGER.info("!!!!!!!!!!!!!!!!!!!!!!!!!! run start_requests")
from twisted.internet import reactor
LOGGER.info(f'reactor_class: {reactor.__class__}')
LOGGER.info(f'scrapy_twisted_reactor: {settings.TWISTED_REACTOR}')
yield Request('https://google.com', dont_filter=True)
async def parse(self, _, **kwargs) -> GenericItem:
LOGGER.info("!!!!!!!!!!!!!!!!!!!!!!!!!! run parse")
item = GenericItem()
item['id'] = 42
yield item
С этого момента вся ветка Taskiq зависает. В журналах написано:
2024-12-02T17:05:30.959738317Z [2024-12-02 17:05:30,959][scrapy.core.engine][INFO ][worker-0] Spider opened
2024-12-02T17:05:30.962073516Z [2024-12-02 17:05:30,961][scrapy.extensions.logstats][INFO ][worker-0] Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2024-12-02T17:05:30.962425736Z [2024-12-02 17:05:30,962][scrapy.extensions.telnet][INFO ][worker-0] Telnet console listening on 127.0.0.1:6023
2024-12-02T17:05:30.962433949Z [2024-12-02 17:05:30,962][uvicorn][INFO ][worker-0] !!!!!!!!!!!!!!!!!!!!!!!!!! run start_requests
2024-12-02T17:05:30.962436121Z [2024-12-02 17:05:30,962][uvicorn][INFO ][worker-0] reactor_class:
2024-12-02T17:05:30.962501235Z [2024-12-02 17:05:30,962][uvicorn][INFO ][worker-0] scrapy_twisted_reactor: twisted.internet.asyncioreactor.AsyncioSelectorReactor
2024-12-02T17:06:30.963036521Z [2024-12-02 17:06:30,962][scrapy.extensions.logstats][INFO ][worker-0] Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
Если отправляется сигнал перезапуска, он фиксируется tasiq, но сброс никогда не происходит, поскольку задача зависает:
[2024-12-02 17:08:46,612][taskiq.process-manager][INFO ][MainProcess] Scheduled workers reload.
2024-12-02T17:08:47.402671790Z [2024-12-02 17:08:47,402][taskiq.receiver.receiver][INFO ][worker-0] Stoping prefetching messages...
2024-12-02T17:08:47.402696006Z [2024-12-02 17:08:47,402][taskiq.receiver.receiver][INFO ][worker-0] Waiting for 1 running tasks to complete...
Я не вижу, что не так с моей конфигурацией, я совершенно не могу заставить это работать
scrapy.__version__
'2.12.0'
twisted.__version__
'24.11.0'
Подробнее здесь: [url]https://stackoverflow.com/questions/79244988/unable-to-integrate-asyncio-and-scrapy[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия