帮助您使用gevent编写代码

greenlight的Python项目详细描述


greenlight是一个功能强大的装饰器,可以帮助您使用gevent编写代码。 您可以将现有函数装入一个绿色列表中运行:

>>> from greenlight import greenlight
>>> from gevent.greenlet import Greenlet
>>> @greenlight
... def async_squaring(n):
...     "An extremely useful function"
...     return n**2
...
>>> g = async_squaring(10)
>>> isinstance(g, Greenlet)
True
>>> g.get()
100

更有趣的是,你可以在一个绿色的发电机里连锁小绿叶 (类似于twisted的inlineCallbacks)。这就省去了样板间的事 否则必须对每个函数调用gevent.spawn(),然后 link()它们在一起,或者,也许,对每一个调用join()get()。 并将结果传递给下一个。使用greenlight,您只需屈服于 内联获取结果:

>>> @greenlight
... def square_thrice(n):
...     squared = yield async_squaring(n)
...     tothe4th = yield async_squaring(squared)
...     tothe8th = yield async_squaring(tothe4th)
...
>>> square_thrice(2).get()
256

由于greenlit函数总是返回greenlet本身,因此可以编写代码 与通常使用的同步代码非常相似,同时仍然确保 执行顺序,只需将greenlit函数链接在一起。

可以使用 green_return函数。如果不使用green_return,则 返回最后生成的greenlet(如前一个示例所示):

>>> from greenlight import green_return
>>> @greenlight
... def greater_than_100():
...     a = 2
...     while True:
...         a = yield async_squaring(a)
...         if a>100:
...             green_return(a)
...
>>> greater_than_100().get()
256

错误处理工作正常:

>>> @greenlight
... def something_bad():
...     raise Exception('O NOES')
...
>>> @greenlight
... def main():
...     try:
...         hundred = yield async_squaring(10)
...         yield something_bad()
...     except Exception, e:
...         print e
...         green_return(None)
...
>>> main().get()
O NOES

greenlight的行为通常类似于gevent.spawn,因为它为 你。如果不希望发生这种情况,可以使用greenlight_nostart

>>> from greenlight import greenlight_nostart as greenlight
>>> @greenlight
... def squared(n):
...     return n**2
...
>>> g = squared(4)
>>> g.started
False
>>> g.start(); g.get()
16

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像