mirror of
https://github.com/kennethreitz/requests-html.git
synced 2026-06-05 14:50:20 +00:00
Add asyncsession.run method
This commit is contained in:
@@ -759,3 +759,13 @@ class AsyncHTMLSession(BaseSession):
|
||||
if hasattr(self, "_browser"):
|
||||
await self._browser.close()
|
||||
super().close()
|
||||
|
||||
def run(self, *coros):
|
||||
""" Pass in all the coroutines you want to run, it will wrap each one
|
||||
in a task, run it and wait for the result. Retuen a list with all
|
||||
results, this are returned in the same order coros are passed in. """
|
||||
tasks = [
|
||||
asyncio.ensure_future(coro()) for coro in coros
|
||||
]
|
||||
done, _ = self.loop.run_until_complete(asyncio.wait(tasks))
|
||||
return [t.result() for t in done]
|
||||
|
||||
+19
-1
@@ -1,5 +1,5 @@
|
||||
import pytest
|
||||
from requests_html import HTMLSession, AsyncHTMLSession
|
||||
from requests_html import HTMLSession, AsyncHTMLSession, HTMLResponse
|
||||
|
||||
session = HTMLSession()
|
||||
|
||||
@@ -30,3 +30,21 @@ async def test_async_pagination(event_loop):
|
||||
for page in pages:
|
||||
r = await asession.get(page)
|
||||
assert await r.html.__anext__()
|
||||
|
||||
|
||||
def test_async_run():
|
||||
asession = AsyncHTMLSession()
|
||||
|
||||
async def test1():
|
||||
return await asession.get('https://xkcd.com/1957/')
|
||||
|
||||
async def test2():
|
||||
return await asession.get('https://reddit.com/')
|
||||
|
||||
async def test3():
|
||||
return await asession.get('https://smile.amazon.com/')
|
||||
|
||||
r = asession.run(test1, test2, test3)
|
||||
|
||||
assert len(r) == 3
|
||||
assert isinstance(r[0], HTMLResponse)
|
||||
|
||||
Reference in New Issue
Block a user