Issue
I have written a simple scraping 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 the result being returned in value
. Rather than printing the 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?
Solution
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
Answered By - Sam Hartman
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.