当前位置: 首页 > 面试题库 >

Greenlet API的纯python实现

白和泽
2023-03-14
问题内容

gevent和eventlet将greenlet包用于异步IO。它被编写为C扩展,因此不适用于Jython或IronPython。如果性能无关紧要,那么在纯Python中实现greenlet
API的最简单方法是什么。

一个简单的例子:

def test1():
    print 12
    gr2.switch()
    print 34

def test2():
    print 56
    gr1.switch()
    print 78

gr1 = greenlet(test1)
gr2 = greenlet(test2)
gr1.switch()

应该打印12、56、34(而不是78)。


问题答案:

自2.5版以来,内置于标准Python发行版中的协同例程可以实现这种目的。如果IronPython和co完全兼容所有Python
2.5功能(我相信它们是),那么您应该可以使用此惯用法。

有关如何使用它们的更多信息,请参见这篇文章:)特别地,您将对PDF感兴趣,在PDF中,作者仅使用纯Python构建系统,该系统提供与无堆栈Python或Greenlet模块类似的功能。

您可能还需要寻找Gogen或Kamelia的想法:这些项目都具有纯python协程实现,您可以采用它们或将其用作自己实现的参考。请看此页面,以轻松地介绍cogen做事方式。

请注意,此处的协同例程实现与greenlet实现之间存在一些差异。纯粹的python实现都使用某种外部调度程序,但思想本质上是相同的:它们为您提供了一种运行轻量级合作任务的方式,而无需求助于线程。此外,上面链接的两个框架都非常类似于异步IO
greenlet

这是您发布但使用重写的示例cogen

from cogen.core.coroutines import coroutine
from cogen.core.schedulers import Scheduler
from cogen.core import events

@coroutine
def test1():
    print 12
    yield events.AddCoro(test2)
    yield events.WaitForSignal(test1)
    print 34

@coroutine
def test2():
    print 56
    yield events.Signal(test1)
    yield events.WaitForSignal(test2)
    print 78

sched = Scheduler()
sched.add(test1)
sched.run()

>>> 12
>>> 56
>>> 34

它比greenlet版本要明确一些(例如,WaitForSignal用于显式创建恢复点),但是您应该了解一般概念。

编辑:我刚刚确认这可以使用jython

KidA% jython test.py 
12
56
34


 类似资料:
  • 问题内容: 是否有GraphViz的开源Java替代品?我知道存在Grappa,它基本上将Graph接口包装为GraphViz作为JavaAPI。但是,布局仍由GraphViz二进制文件完成。 我正在寻找一个纯Java的开源库,它提供与GraphViz相同的功能和布局算法。 问题答案: 您可以看一下具有可视化和分析功能的JUNG(Java通用网络/图形框架)。它是开源的。

  • 本文向大家介绍Python API 自动化实战详解(纯代码),包括了Python API 自动化实战详解(纯代码)的使用技巧和注意事项,需要的朋友参考一下 主要讲如何在公司利用Python 搞API自动化。 1.分层设计思路 dataPool :数据池层,里面有我们需要的各种数据,包括一些公共数据等 config :基础配置 tools : 工具层 common: 公共方法层 runCase :需

  • 本文向大家介绍纯Javascript实现ping功能的方法,包括了纯Javascript实现ping功能的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了纯Javascript实现ping功能的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 话说上回我们讲到如何在 windows 下构造一个用户模式的 调试器,最后在大家的不懈努力下,终于历史性的完成了这一伟 大工程。这回,咱们该去取取经了,看看传说中的 PyDbg。传说又是传说,别担心,这 个传说是真的,我用人格担保。PyDbg 出生于 2006 年,出生地 Montreal, Quebec,父亲 Pedram Amini,担当角色:逆向工程框架 PaiMei 的核心组件。现在 Py

  • 问题内容: 在纯Javascript中有AAAX Post的任何实现(也许使用xmlhttprequest)吗? 例如,如果我有这样的表格: 这是我在jQuery中对AJAX的实现 我可以在 不 使用jQuery的情况下做同样的事情吗?如果有可能, 如何 将上述jQuery代码实现为纯Java代码? 问题答案: 是的,当然有可能:) JS server.php 说明: 函数采用其类名称的形式元素并

  • 本文向大家介绍纯JSP实现的简单登录示例,包括了纯JSP实现的简单登录示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了纯JSP实现的简单登录的方法。分享给大家供大家参考,具体如下: 文件共有四个web.xml、login.jsp、logout.jsp、welcome.jsp四个文件 测试环境:Tomcat 6.0.x 假设项目名称是LoginSample,我的目录结构是这样的 ...\