python3 - 从异步方法获得结果

时间:2017-05-18 13:02:19

标签: python async-await python-asyncio python-3.6

我是Python的新手。我用asyncio编写了一个简单的报废程序。这是我的代码片段

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

我想打印返回值的结果。打印变量' s 价值,打印出像这样的东西

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

`

如何才能获得结果而不打印?

1 个答案:

答案 0 :(得分:13)

最简单的方法是编写

value = loop.run_until_complete(task)

只有在您想等待一项任务时才有效。 如果您需要多个任务,则需要正确使用asyncio.wait。 它返回一个包含已完成和待定期货的元组。但是,默认情况下,待处理的期货将为空,因为它等待所有期货完成。

类似

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