【发布时间】:2017-02-18 13:14:43
【问题描述】:
我已经阅读了大量关于 Python 3.5 async/await 的文章和教程。我不得不说我很困惑,因为有些使用 get_event_loop() 和 run_until_complete(),有些使用 ensure_future(),有些使用 asyncio.wait(),有些使用 call_soon()。
似乎我有很多选择,但我不知道它们是否完全相同,或者在某些情况下您使用循环并且在某些情况下您使用 wait()。
但问题是所有示例都与asyncio.sleep() 一起工作,模拟真正的慢速操作,返回一个等待对象。一旦我尝试将这一行换成一些真实的代码,整个事情就会失败。上面写的方法和我应该如何运行还没有准备好异步/等待的第三方库之间的区别到底是什么。我确实使用 Quandl 服务来获取一些股票数据。
import asyncio
import quandl
async def slow_operation(n):
# await asyncio.sleep(1) # Works because it's await ready.
await quandl.Dataset(n) # Doesn't work because it's not await ready.
async def main():
await asyncio.wait([
slow_operation("SIX/US9884981013EUR4"),
slow_operation("SIX/US88160R1014EUR4"),
])
# You don't have to use any code for 50 requests/day.
quandl.ApiConfig.api_key = "MY_SECRET_CODE"
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
我希望你明白我的失落感以及我希望并行运行的事情是多么简单。
【问题讨论】:
标签: python asynchronous async-await python-3.5 python-asyncio