Я хочу использовать 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]>