2017-12-03 2 views
2

내가 막 다른 골목에 다다 랐다. asyncio 루프에서 scrapy 스파이더를 실행할 수있는 방법이 있습니까? 오류로 날 리드asyncio 내부에서 scrapy 스파이더를 실행하는 방법은 무엇입니까?

import asyncio 
from scrapy.crawler import CrawlerProcess 
from myscrapy import MySpider 
import scrapy 

async def do_some_work(): 
    process = CrawlerProcess() 
    await process.crawl(MySpider) 

loop = asyncio.get_even_loop() 
loop.run_until_complete(do_some_work()) 

: 아래 코드의 예를 들어

raise TypeError('A Future, a coroutine or an awaitable is required') 
TypeError: A Future, a coroutine or an awaitable is required 

난 후 또 다른 코 루틴이 있어야 기다리고 있음을 이해한다. 그것을 무시하고 여전히 비동기로 작동하도록하는 방법이 있습니까? 감사합니다

+0

왜 기다릴 수 있다고 생각하십니까? 모든 메소드가 비동기로 작동 할 수있는 것은 아닙니다. – furas

답변

0

전체 치료법은 동기식 코드입니다. 차단이 발생할 때마다 실행중인 리소스를 선택 루프로 되돌리기위한 비동기 메커니즘 (코 루틴)이 없습니다. 주요 차단 항목은 네트워크 요청입니다. libs scrapy는 asyncio를 지원하지 않습니다. 그래서 원래의 네트워크 라이브러리를 대체하기 위해 asyncio 나 aiohttp를 구현하기 위해 치료 소스 ​​코드를 열면 작동 할 것입니다. 그러나 그 libs 위의 복잡한 꼬인 모듈도 있습니다. (asyncio와 비슷하지만, asyncio만큼 빠르지는 않지만 파이썬 2 이후). asyncio를 사용하여 새로운 프레임 워크를 처음부터 빌드하는 것보다 더 어렵게 만들 수 있습니다.

관련 문제