Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python3 -Get result from async method

I am a newbie to Python. I have written a simple scrapping program using asyncio. Here are my code snippets

 loop = asyncio.get_event_loop()
 task = loop.create_task(conSpi.parse(arguments.url))
 value = loop.run_until_complete(asyncio.wait([task]))
 loop.close()

I want to print result being returned in value.Rather printing variable's value, it prints something like this

 {<Task finished coro=<ConcurrentSpider.parse() done, 
 defined at /home/afraz/PycharmProjects/the-lab/concurrentspider.py:28> result=3>}

`

How can I get the result only and not get rest printed?

like image 562
Afraz Ahmad Avatar asked May 18 '17 13:05

Afraz Ahmad


1 Answers

The simplest approach is to write

value = loop.run_until_complete(task)

That only works if you want to wait on one task. If you need more than one task, you'll need to use asyncio.wait correctly. It returns a tuple containing completed and pending futures. By default though, the pending futures will be empty because it waits for all futures to complete.

So something like

done, pending = loop.run_until_complete(asyncio.wait( tasks))
for future in done:
    value = future.result() #may raise an exception if coroutine failed
    # do something with value
like image 120
Sam Hartman Avatar answered Oct 11 '22 05:10

Sam Hartman