我在概念化Greenlets时遇到了一些麻烦。我了解在同一过程中在运行的功能之间进行切换的能力如何打开通往无限可能性的大门。但是我还没有遇到任何有关它们如何解决标准python技术无法解决的问题的示例(除了发电机嵌套函数问题外,老实说...“ meh”)。
从greenlet的主页上获取以下示例,该示例基本上是一种更复杂的方法:
def test0():
print 12
print 56
print 34
我知道这只是多余的示例,但这似乎是greenlets可以做的长短。除非你是多大的控制狂说的,你必须是何时,何地以及如何执行的应用程序中的每一行代码,如何谁决定一个test0
使用greenlets改进?或以GUI为例(首先让我对greenlets感兴趣);不难考虑不需要while
循环的策略,不是process_commands
吗?
我已经看到可以使用greenlet完成一些很酷的事情;但只能与在其他程序包(例如Stackless,gevent等)中实现的其他某些暗法术结合使用。即使有这些,greenlet还是不够的,需要它们进行子类化。
现实世界中有哪些例子可以说明如何单独使用greenlet来增强python的功能?我怀疑答案就在于网络-这可能就是为什么我不明白。但是还有其他吗?
请注意,您的示例将所有print
s明确地编织到一个函数中。在真实的程序中,您不仅具有两个功能,而且还具有多个功能。您具有任意数量的函数,其中一些甚至来自您无法控制的第三方库,并且重写所有代码以插入所有语句并不是那么简单。
图形用户界面实际上是一个很好的例子:通过让事件循环(这是在您处理命令在实践中,BTW方式)挂起自己的时候没有活动看,你的GUI可以保持互动在同一线程上。如果事件循环必须真正停止并等待用户按下某个键,则您的GUI将冻结,因为不会告诉操作系统重绘该窗口。
并不是说我特别喜欢gevent。我将赌注放在stdlib asyncio库上。:)但这实际上是相同的想法:当您要做的工作涉及很多等待时,请同时运行其他代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句