greenlet本身真的有用吗?

2024-09-28 21:26:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在想小绿球有什么大不了的。我理解在同一进程中在运行函数之间切换的能力是如何打开一扇通向各种可能性的大门的;但是我没有遇到任何例子说明它们是如何解决标准python技术无法解决的问题的(除了nested-functions-in-generators problem——老实说,这是……“meh”)。你知道吗

以greenlet主页上的this example为例,这基本上是一种更复杂的方法:

def test0():
    print 12
    print 56
    print 34

我知道这只是一个多余的例子,但这似乎是greenlet所能做的长短不一。除非你是一个控制狂,你必须决定应用程序中每一行代码的执行时间、执行地点和执行方式,否则greenlet是如何改进test0的?或者以GUI example为例(这正是我首先对greenlet感兴趣的地方);考虑一个不需要process_commands中的while循环的策略应该不难,不是吗?你知道吗

我见过some一些很酷的东西可以用greenlets来完成;但是只能与另一个包(例如Stackless、gevent等)中实现的一些其他黑暗魔法结合使用。即使有了这些,greenlet仍然不够,需要它们进行子类化。你知道吗

我的问题:

有哪些真实的例子可以说明如何单独使用greenlet来增强python的功能?我怀疑答案在于网络——这可能就是我不明白的原因。但是还有其他的吗?你知道吗


Tags: 函数标准进程example能力可能性functionsgreenlet
1条回答
网友
1楼 · 发布于 2024-09-28 21:26:14

请注意,您的示例已显式地将所有print组合到一个函数中。在一个实际的程序中,你不仅仅有两个函数;你有一些任意数量的函数,其中一些甚至来自你不控制的第三方库,重写所有的代码来交错所有的语句并不是那么简单。你知道吗

GUI实际上是一个很好的例子:当没有可读取的事件时,通过让事件循环(实际上是处理命令的方式,顺便说一句)挂起自身,GUI可以在同一线程上保持交互。如果事件循环必须实际停止并等待用户按下某个键,那么GUI就会冻结,因为没有任何东西会告诉操作系统重新绘制窗口。你知道吗

并不是说我特别喜欢gevent;我把赌注押在stdlibasyncio库上。:)但实际上都是一样的想法:当您有一些工作要做时,需要大量等待,让其他代码同时运行。你知道吗

相关问题 更多 >