diff --git a/benchmarks/spawn.py b/benchmarks/spawn.py index 52762dc..a8ade59 100644 --- a/benchmarks/spawn.py +++ b/benchmarks/spawn.py @@ -3,6 +3,23 @@ import eventlet import benchmarks +def cleanup(): + eventlet.sleep(0.2) + +iters = 10000 +best = benchmarks.measure_best(5, iters, + 'pass', + cleanup, + eventlet.sleep) +print "eventlet.sleep (main)", best[eventlet.sleep] + +gt = eventlet.spawn(benchmarks.measure_best,5, iters, + 'pass', + cleanup, + eventlet.sleep) +best = gt.wait() +print "eventlet.sleep (gt)", best[eventlet.sleep] + def dummy(i=None): return i @@ -15,10 +32,7 @@ def run_spawn_n(): def run_spawn_n_kw(): eventlet.spawn_n(dummy, i=1) -def cleanup(): - eventlet.sleep(0.2) -iters = 10000 best = benchmarks.measure_best(5, iters, 'pass', cleanup, diff --git a/eventlet/hubs/hub.py b/eventlet/hubs/hub.py index 778bc20..4f0d75b 100644 --- a/eventlet/hubs/hub.py +++ b/eventlet/hubs/hub.py @@ -112,9 +112,11 @@ class BaseHub(object): if self.greenlet.dead: self.greenlet = greenlet.greenlet(self.run) try: - greenlet.getcurrent().parent = self.greenlet + current = greenlet.getcurrent() + if self.greenlet.parent is not current: + current.parent = self.greenlet except ValueError: - pass + pass # gets raised if there is a greenlet parent cycle return self.greenlet.switch() def squelch_exception(self, fileno, exc_info):