我在概念化greenlets的重要性方面遇到了一些麻烦。我理解在同一过程中在运行功能之间切换的能力如何打开通向可能性世界的大门;但是我没有遇到任何关于他们如何解决标准python技术无法解决的问题的例子(nested-functions-in-generators problem除外 - 老实说......“meh”)。
从greenlet的主页面中取this example,这基本上是一种更为复杂的方式:
def test0():
print 12
print 56
print 34
我知道这只是一个多余的例子,但这似乎是greenlets可以做的长期和短期。除非你 通过使用greenlets改进test0
?或者采取GUI example(这首先是我对greenlets感兴趣的东西);不应该考虑不需要while
中的process_commands
循环的策略,不是吗?
我已经看到some很酷的事情可以用greenlets完成;但只能与另一个包装中实施的其他暗色巫术相结合(例如,Stackless,gevent等)。即使有这些,greenlets还不够,需要它们继承。
有哪些人可以自己使用greenlets来增强python功能的真实例子?我怀疑答案在于网络 - 这可能就是我不理解的原因。但还有其他人吗?
答案 0 :(得分:0)
请注意,您的示例已将所有print
一起显式编组为一个函数。在一个真实的程序中,你不仅仅有两个功能;你有一些任意数量的函数,其中一些甚至来自你无法控制的第三方库,并且重写所有代码以交错所有语句并不是那么简单。
GUI实际上是一个很好的例子:通过让事件循环( 实际上处理命令的方式,btw)在没有要读取的事件时暂停自身,您的GUI可以保持交互在同一个线程上。如果事件循环必须实际停止并等待用户按下某个键,则GUI将冻结,因为没有任何东西会告诉操作系统重绘窗口。
并不是说我特别喜欢gevent;我将我的赌注押在stdlib asyncio库上。 :)但它确实是完全相同的想法:当你有一些工作需要做很多等待时,让其他代码同时运行。