Использование aiohttp для получения страницы в потоке - получил будущее прикреплен к другой петле - PullRequest
1 голос
/ 03 марта 2020

Я хочу использовать aiohttp для извлечения страниц в потоке, но при выполнении возникает ошибка. Я думаю, это может вызвать aiohttp, консоль покажет, что задание coro было уничтожено, но оно находится на рассмотрении! Надеюсь найти ответ! спасибо!

import asyncio
import aiohttp
import threading

    def static(self):
        crawl_task = threading.Thread(target=self.page_crawler, args=([self.domain],))
        crawl_task.start()
        crawl_task.join()

    def page_crawler(self, urls: list):
        if not urls:
            return
        # loop = asyncio.get_event_loop()
        new_loop = asyncio.new_event_loop()
        asyncio.set_event_loop(new_loop)
        loop = asyncio.get_event_loop()

        # loop.run_forever()
        access_task = asyncio.gather(*[self.access(url) for url in urls])
        loop.run_until_complete(access_task)

    async def access(self, url: str):
        timeout = aiohttp.ClientTimeout(total=self.static_timeout)
        connector = aiohttp.TCPConnector(limit=60)
        async with self.sem:
            if await self.is_new_url(url):
                async with aiohttp.ClientSession(timeout=timeout, connector=connector) as session:
                    for _ in range(3):
                        try:
                            landing = ''
                            status = 0
                            for s in range(3):
                                async with session.get(url) as response:
                                    status = response.status
                                    landing = str(response.url)

                                    if status == 200:
                                        html = await response.content.read()
RuntimeError: Task <Task pending coro=<DomainDetector.access() running at C:/Users/JChien02/Desktop/J Crawler/Static Result/domain_crawler.py:233> cb=[gather.<locals>._done_callback() at C:\Users\JChien02\AppData\Local\Continuum\anaconda3\lib\asyncio\tasks.py:691]> got Future <Future pending> attached to a different loop

Task was destroyed but it is pending!
task: <Task pending coro=<TCPConnector._resolve_host() running at C:\Users\JChien02\Desktop\J Crawler\venv\lib\site-packages\aiohttp\connector.py:830> wait_for=<Future pending cb=[_chain_future.<locals>._call_check_cancel() at C:\Users\JChien02\AppData\Local\Continuum\anaconda3\lib\asyncio\futures.py:348, <TaskWakeupMethWrapper object at 0x000002200FAA97F8>()]> cb=[shield.<locals>._inner_done_callback() at C:\Users\JChien02\AppData\Local\Continuum\anaconda3\lib\asyncio\tasks.py:803]>
...