python eventlet模块

原创 2015年11月19日 16:17:53

python eventlet模块


def _func_on_containers(logger, conf, concurrency_key, func, **kwargs):
    """Run a function on each container with concurrency."""

    bench = Bench(logger, conf, [])
    pool = eventlet.GreenPool(int(getattr(conf, concurrency_key)))
    for container in conf.containers:
        pool.spawn_n(func, bench.url, bench.token, container, **kwargs)
def spawn_n(self, function, *args, **kwargs):
        """Create a greenthread to run the *function*, the same as
        :meth:`spawn`.  The difference is that :meth:`spawn_n` returns
        None; the results of *function* are not retrievable.
        # if reentering an empty pool, don't try to wait on a coroutine freeing
        # itself -- instead, just execute in the current coroutine
        current = greenthread.getcurrent()
        if self.sem.locked() and current in self.coroutines_running:
            self._spawn_n_impl(function, args, kwargs, None)
            g = greenthread.spawn_n(
                function, args, kwargs, True)
            if not self.coroutines_running:
                self.no_coros_running = event.Event()

def waitall(self):
        """Waits until all greenthreads in the pool are finished working."""
        assert greenthread.getcurrent() not in self.coroutines_running, \
            "Calling waitall() from within one of the " \
            "GreenPool's greenthreads will never terminate."
        if self.running():

def spawn(func, *args, **kwargs):
    """Create a greenthread to run ``func(*args, **kwargs)``.  Returns a
    :class:`GreenThread` object which you can use to get the results of the

    Execution control returns immediately to the caller; the created greenthread
    is merely scheduled to be run at the next available opportunity.
    Use :func:`spawn_after` to  arrange for greenthreads to be spawned
    after a finite delay.
    hub = hubs.get_hub()
    g = GreenThread(hub.greenlet)
    hub.schedule_call_global(0, g.switch, func, args, kwargs)
    return g

def spawn_n(func, *args, **kwargs):
    """Same as :func:`spawn`, but returns a ``greenlet`` object from
    which it is not possible to retrieve either a return value or
    whether it raised any exceptions.  This is faster than
    :func:`spawn`; it is fastest if there are no keyword arguments.

    If an exception is raised in the function, spawn_n prints a stack
    trace; the print can be disabled by calling
    :func:`eventlet.debug.hub_exceptions` with False.
    return _spawn_n(0, func, args, kwargs)[1]

Python eventlet

  • youyou1543724847
  • youyou1543724847
  • 2017年05月08日 10:54
  • 1072

python eventlet模块

python eventlet模块python中更实用eventlet模块创建线程或者线程池。def _func_on_containers(logger, conf, concurrency_key...
  • litianze99
  • litianze99
  • 2015年11月19日 16:17
  • 587

keystone WSGI流程

作为OpenStack两种主要的通信方式(RESTful API与消息总线)之一,理解RESTful API的设计思路和执行过程,有助于我们对OpenStack有更好的理解。RESTful只是设计风格...
  • gj19890923
  • gj19890923
  • 2016年03月26日 11:15
  • 4748

python eventlet 模块学习tpool和greenpool

当我们需要使用到python的c接口,特别是一些对os的系统调用,官方说明如下: The vast majority of the times you’ll want to use threads...
  • u011816753
  • u011816753
  • 2017年03月27日 21:02
  • 759

python eventlet

  • u010571844
  • u010571844
  • 2016年01月06日 16:29
  • 1715

keystone-all 代码分析

possible_dir = os.path.normpath(os.path.join(os.path.abspath(__file__), ...
  • u012798391
  • u012798391
  • 2015年09月13日 18:47
  • 1158


Celery是一个专注于实时处理和任务调度的分布式任务队列。所谓任务就是消息,消息中的有效载荷中包含要执行任务需要的全部数据。 使用Celery的常见场景如下: 1. Web应用。当用户触发的一个...
  • dongwm1
  • dongwm1
  • 2016年09月08日 15:42
  • 1222

Python2.7 异步eventlet

Python2.7  异步eventlet   该模块提供对 greenthread 池的支持。   greenthread 池提供了一定数量的备用 greenthread ,有效...
  • qq_23934063
  • qq_23934063
  • 2017年12月13日 08:44
  • 765


python网络库也有了基于协程的实现,比较著名的是 gevent、eventlet 它两之间的关系可以参照 Comparing gevent to eventlet, 本文主要简单介绍一下event...
  • mumumuwudi
  • mumumuwudi
  • 2015年07月29日 00:44
  • 3147

Openstack liberty 中Cinder-api启动过程源码分析2

  • lzw06061139
  • lzw06061139
  • 2016年08月19日 10:01
  • 1959
您举报文章:python eventlet模块