在appengine上编程并使用NDB处理Google的数据存储时,the ndb package公开了异步方法,这些方法的API非常清晰,使用也很简单:
future = my_key.get_async()
# do some work
entity = future.get_result()
看来,使用asyncio,任何纯Python程序都可以为各种目的使用相同类型的机器和相同的功能。然而,asyncioapi不那么友好,主要是因为需要显式地管理事件循环,而且还因为程序中的所有内容都必须以异步方式考虑。这与ndbapi形成了对比,在ndbapi中,可以在不干扰程序其余部分的情况下到处插入一些异步内容,但异步进程的行为却如所愿。你知道吗
在我深入研究这个包的源代码之前,我只想知道是否有一些关于这一点的重要提示。你知道吗
NDB确实使用了一个事件循环,但它是一个高度定制的循环,是为GAE(标准)环境定制的。不一定基于
threading
模块(使用threading.local
,但仅当应用程序配置为线程安全并且每个线程/请求都有一个事件循环时)。我想,由于它非常具体的用法,它可以很好地方便地隐藏在更高级别的api后面。你知道吗您可以在^{} 中找到它:
相比之下,提供一个在任何环境下都能很好工作的托管通用事件循环并不是一件容易的事情,我想,这就是为什么asyncio让它由程序员来决定——根据应用程序环境和实现进行适当的裁剪。你知道吗
相关问题 更多 >
编程相关推荐