`
gashero
  • 浏览: 966916 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

greenlet实践,将异步回调转换为顺序执行

阅读更多

 

greenlet实践

作者: 日期:
gashero
2009-06-16

1   简介

本想依靠它实现异步转同步,试试看吧。

2   一个异步转同步的例子,使用Twisted

将Twisted中的异步改为同步了:

#! /usr/bin/env python
# -*- coding: UTF-8 -*-
# File: readcall.py
# Date: 2009-06-16
# Author: gashero

"""
测试Greenlet与Twisted合用,实现异步改同步调用
"""

import os
import sys

import greenlet
from twisted.internet import reactor,protocol
from twisted.protocols import basic
from twisted.python import log

def wait_host():
    return

class RCProtocol(basic.LineReceiver):

    def connectionMade(self):
        print 'connection made'
        self.grrc=greenlet.greenlet(self.read_chunk)
        self.grrc.switch()      #切换到处理函数read_chunk()
        print 'switched to grrc'
        return

    def connectionLost(self,reason):
        print 'connection lost'
        return

    def _dataReceived(self,data):
        return

    def lineReceived(self,line):
        print 'line Received'
        self.grrc.switch(line)
        return

    def read_chunk(self):
        while True:
            #死循环中处理每次读取数据成功
            print 'in read_chunk()'
            g_self=greenlet.getcurrent()
            chunk=g_self.parent.switch()    #切换到主循环的greenlet,等被切换回来时就返回了传递的数据了
            if 'quit' in chunk.lower():
                self.transport.write('HTTP/1.1 200 OK\r\nContent-Length:10\r\n\r\nHelloWorld')
                self.transport.loseConnection()
                break
        return

class RCFactory(protocol.ServerFactory):
    protocol=RCProtocol

def main():
    log.startLogging(sys.stdout)
    reactor.listenTCP(8090,RCFactory())
    reactor.run()
    return

if __name__=='__main__':
    main()
2
0
分享到:
评论

相关推荐

    Greenlet一个能把异步操作挪到独立线程的js库

    总之,Greenlet为JavaScript开发者提供了一种有效处理异步操作的工具,通过模拟轻量级线程,提高了代码的并发执行能力,降低了编写异步代码的复杂性。理解和掌握Greenlet的使用,可以帮助开发者构建更高效、响应更快...

    greenlet工具解压包

    greenlet与Python的生成器(generator)结合,能够轻松创建出复杂的异步流程,而无需复杂的回调函数或 futures。 总的来说,greenlet是Python中实现轻量级并发的重要工具,它简化了异步编程,提高了程序的执行效率...

    greenlet-0.4.10.zip

    generator实现的协程在yield value时只能将value返回给调用者(caller)。 而在greenlet中,target.switch(value)可以切换到指定的协程(target), 然后yield value。greenlet用switch来表示协程的切换,从一个协程...

    Python库 | greenlet-0.4.12-cp27-cp27m-manylinux1_x86_64.whl

    1. **网络编程**:`greenlet`常用于异步I/O框架,如`gevent`,它允许在单个线程中高效地处理多个网络连接,无需等待阻塞的I/O操作完成。 2. **并发处理**:在需要同时处理多个任务但又不想使用多线程或多进程的情况...

    PyPI 官网下载 | greenlet-0.4.3.win-amd64-py2.7.exe

    在实际开发中,greenlet常用于网络服务器、数据库连接池、异步I/O等场景,通过greenlet之间的切换,可以实现非阻塞I/O,提高服务的吞吐量。使用greenlet需要了解其工作原理,包括如何创建和切换greenlet,以及如何...

    greenlet及gevent库

    这意味着在Gevent环境中,当一个greenlet进行I/O操作时,系统会自动切换到另一个可执行的greenlet,待I/O操作完成后再切换回来,从而实现了无感知的异步执行。 安装`greenlet`和`gevent`的过程如下: 1. 首先确保...

    greenlet-0.4.15-cp38-cp38-win_amd64.whl

    python3.8版本的greenlet wheel文件,pip安装某个库失败的时候,如果提示greenlet安装失败,可以用这个wheel文件安装

    Python库 | greenlet-0.3.1.win32-py2.6.exe

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:greenlet-0.3.1.win32-py2.6.exe 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python-diesel基于Greenlet的事件IOPython框架

    当这些事件发生时,diesel会自动调度Greenlet,执行相应的回调函数,而不是等待I/O操作完成。这种方式允许程序同时处理多个事件,提高了整体的并发性和响应速度。 在diesel中,核心组件包括事件循环(event loop)...

    greenlet-0.4.15-cp35-cp35m-win32

    greenlet-0.4.15-cp35-cp35m-win32

    greenlet::lizard:将异步函数移到其自己的线程中

    格林莱特 将异步函数移到其自己的线程中。 简化的单功能版本,提供。 这个名字的选择,但是。 Greenlet支持IE10 +,因为它使用 。 为了使用 ,必须使用诸如类的库对Web Workers进行。安装及使用npm i -S greenlet ...

    Python库 | greenlet-0.3.3.win32-py2.4.exe

    安装“greenlet-0.3.3.win32-py2.4.exe”这个文件非常简单,只需在Windows环境下运行该可执行文件,即可将greenlet库安装到Python环境中。值得注意的是,这是一个针对Python 2.4的Windows平台的版本,对于其他Python...

    PyPI 官网下载 | greenlet-0.4.0-py2.7-win-amd64.egg

    资源来自pypi官网。 资源全名:greenlet-0.4.0-py2.7-win-amd64.egg

    Python库 | greenlet-1.0a1-cp27-cp27m-manylinux2010_x86_64.whl

    标题中的“greenlet-1.0a1-cp27-cp27m-manylinux2010_x86_64.whl”是Python的一个特定版本的库包,名为greenlet,版本号为1.0a1。这个包是为Python 2.7编译的,具有cp27m的ABI(Application Binary Interface)标识...

    PyPI 官网下载 | greenlet-0.4.2.win-amd64-py2.7.exe

    安装greenlet-0.4.2.win-amd64-py2.7.exe这个文件,用户只需双击运行,遵循安装向导,即可将greenlet库添加到Python环境中。需要注意的是,对于使用pip或其他方式安装的依赖,直接通过命令行运行`pip install ...

    greenlet-1.1.1-cp310-cp310-win_amd64

    greenlet-1.1.1-cp310-cp310-win_amd64

    Python库 | greenlet-0.4.16-cp37-cp37m-manylinux1_x86_64.whl

    资源分类:Python库 所属语言:Python 资源全名:greenlet-0.4.16-cp37-cp37m-manylinux1_x86_64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    greenlet-1.1.1-cp37-cp37m-win_amd64

    greenlet-1.1.1-cp37-cp37m-win_amd64

    PyPI 官网下载 | greenlet-0.4.13-cp34-cp34m-manylinux1_x86_64.whl

    资源来自pypi官网。 资源全名:greenlet-0.4.13-cp34-cp34m-manylinux1_x86_64.whl

Global site tag (gtag.js) - Google Analytics