Get aiohttp results as string



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








0















I'm trying to get data from a website using async in python. As an example I used this code (under A Better Coroutine Example): https://www.blog.pythonlibrary.org/2016/07/26/python-3-an-intro-to-asyncio/



Now this works fine, but it writes the binary chunks to a file and I don't want it in a file. I want the resulting data directly. But I currently have a list of coroutine objects which I can not get the data out of.



The code:



# -*- coding: utf-8 -*-
import aiohttp
import asyncio
import async_timeout

async def fetch(session, url):
with async_timeout.timeout(10):
async with session.get(url) as response:
return await response.text()


async def main(loop, urls):
async with aiohttp.ClientSession(loop=loop) as session:
tasks = [fetch(session, url) for url in urls]
await asyncio.gather(*tasks)
return tasks

# time normal way of retrieval
if __name__ == '__main__':
urls = [a list of urls..]

loop = asyncio.get_event_loop()
details_async = loop.run_until_complete(main(loop, urls))


Thanks










share|improve this question




























    0















    I'm trying to get data from a website using async in python. As an example I used this code (under A Better Coroutine Example): https://www.blog.pythonlibrary.org/2016/07/26/python-3-an-intro-to-asyncio/



    Now this works fine, but it writes the binary chunks to a file and I don't want it in a file. I want the resulting data directly. But I currently have a list of coroutine objects which I can not get the data out of.



    The code:



    # -*- coding: utf-8 -*-
    import aiohttp
    import asyncio
    import async_timeout

    async def fetch(session, url):
    with async_timeout.timeout(10):
    async with session.get(url) as response:
    return await response.text()


    async def main(loop, urls):
    async with aiohttp.ClientSession(loop=loop) as session:
    tasks = [fetch(session, url) for url in urls]
    await asyncio.gather(*tasks)
    return tasks

    # time normal way of retrieval
    if __name__ == '__main__':
    urls = [a list of urls..]

    loop = asyncio.get_event_loop()
    details_async = loop.run_until_complete(main(loop, urls))


    Thanks










    share|improve this question
























      0












      0








      0








      I'm trying to get data from a website using async in python. As an example I used this code (under A Better Coroutine Example): https://www.blog.pythonlibrary.org/2016/07/26/python-3-an-intro-to-asyncio/



      Now this works fine, but it writes the binary chunks to a file and I don't want it in a file. I want the resulting data directly. But I currently have a list of coroutine objects which I can not get the data out of.



      The code:



      # -*- coding: utf-8 -*-
      import aiohttp
      import asyncio
      import async_timeout

      async def fetch(session, url):
      with async_timeout.timeout(10):
      async with session.get(url) as response:
      return await response.text()


      async def main(loop, urls):
      async with aiohttp.ClientSession(loop=loop) as session:
      tasks = [fetch(session, url) for url in urls]
      await asyncio.gather(*tasks)
      return tasks

      # time normal way of retrieval
      if __name__ == '__main__':
      urls = [a list of urls..]

      loop = asyncio.get_event_loop()
      details_async = loop.run_until_complete(main(loop, urls))


      Thanks










      share|improve this question














      I'm trying to get data from a website using async in python. As an example I used this code (under A Better Coroutine Example): https://www.blog.pythonlibrary.org/2016/07/26/python-3-an-intro-to-asyncio/



      Now this works fine, but it writes the binary chunks to a file and I don't want it in a file. I want the resulting data directly. But I currently have a list of coroutine objects which I can not get the data out of.



      The code:



      # -*- coding: utf-8 -*-
      import aiohttp
      import asyncio
      import async_timeout

      async def fetch(session, url):
      with async_timeout.timeout(10):
      async with session.get(url) as response:
      return await response.text()


      async def main(loop, urls):
      async with aiohttp.ClientSession(loop=loop) as session:
      tasks = [fetch(session, url) for url in urls]
      await asyncio.gather(*tasks)
      return tasks

      # time normal way of retrieval
      if __name__ == '__main__':
      urls = [a list of urls..]

      loop = asyncio.get_event_loop()
      details_async = loop.run_until_complete(main(loop, urls))


      Thanks







      python python-asyncio aiohttp






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 16 '18 at 11:09









      YorianYorian

      74011325




      74011325






















          1 Answer
          1






          active

          oldest

          votes


















          2














          The problem is in return tasks at the end of main(), which is not present in the original article. Instead of returning the coroutine objects (which are not useful once passed to asyncio.gather), you should be returning the tuple returned by asyncio.gather, which contains the results of running the coroutines in correct order. For example:



          async def main(loop, urls):
          async with aiohttp.ClientSession(loop=loop) as session:
          tasks = [fetch(session, url) for url in urls]
          results = await asyncio.gather(*tasks)
          return results


          Now loop.run_until_complete(main(loop, urls)) will return a tuple of texts in the same order as the URLs.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53336675%2fget-aiohttp-results-as-string%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            2














            The problem is in return tasks at the end of main(), which is not present in the original article. Instead of returning the coroutine objects (which are not useful once passed to asyncio.gather), you should be returning the tuple returned by asyncio.gather, which contains the results of running the coroutines in correct order. For example:



            async def main(loop, urls):
            async with aiohttp.ClientSession(loop=loop) as session:
            tasks = [fetch(session, url) for url in urls]
            results = await asyncio.gather(*tasks)
            return results


            Now loop.run_until_complete(main(loop, urls)) will return a tuple of texts in the same order as the URLs.






            share|improve this answer



























              2














              The problem is in return tasks at the end of main(), which is not present in the original article. Instead of returning the coroutine objects (which are not useful once passed to asyncio.gather), you should be returning the tuple returned by asyncio.gather, which contains the results of running the coroutines in correct order. For example:



              async def main(loop, urls):
              async with aiohttp.ClientSession(loop=loop) as session:
              tasks = [fetch(session, url) for url in urls]
              results = await asyncio.gather(*tasks)
              return results


              Now loop.run_until_complete(main(loop, urls)) will return a tuple of texts in the same order as the URLs.






              share|improve this answer

























                2












                2








                2







                The problem is in return tasks at the end of main(), which is not present in the original article. Instead of returning the coroutine objects (which are not useful once passed to asyncio.gather), you should be returning the tuple returned by asyncio.gather, which contains the results of running the coroutines in correct order. For example:



                async def main(loop, urls):
                async with aiohttp.ClientSession(loop=loop) as session:
                tasks = [fetch(session, url) for url in urls]
                results = await asyncio.gather(*tasks)
                return results


                Now loop.run_until_complete(main(loop, urls)) will return a tuple of texts in the same order as the URLs.






                share|improve this answer













                The problem is in return tasks at the end of main(), which is not present in the original article. Instead of returning the coroutine objects (which are not useful once passed to asyncio.gather), you should be returning the tuple returned by asyncio.gather, which contains the results of running the coroutines in correct order. For example:



                async def main(loop, urls):
                async with aiohttp.ClientSession(loop=loop) as session:
                tasks = [fetch(session, url) for url in urls]
                results = await asyncio.gather(*tasks)
                return results


                Now loop.run_until_complete(main(loop, urls)) will return a tuple of texts in the same order as the URLs.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 16 '18 at 13:44









                user4815162342user4815162342

                64.4k594151




                64.4k594151





























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53336675%2fget-aiohttp-results-as-string%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    27

                    Top Tejano songwriter Luis Silva dead of heart attack at 64

                    Category:Rhetoric