def test_spawn_n(self): p = GreenPool(4) results_closure = [] def do_something(a): sleep(0.01) results_closure.append(a) for i in xrange(10): p.spawn(do_something, i) p.waitall() self.assertEquals(sorted(results_closure), range(10))
def subtest(intpool_size, pool_size, num_executes): def run(int_pool): token = int_pool.get() sleep(0.0001) int_pool.put(token) return token int_pool = IntPool(intpool_size) pool = GreenPool(pool_size) for ix in xrange(num_executes): pool.spawn(run, int_pool) pool.waitall()
def test_exceptions(self): p = GreenPool(2) for m in (p.spawn, p.spawn_n): self.assert_pool_has_free(p, 2) m(raiser, RuntimeError()) self.assert_pool_has_free(p, 1) p.waitall() self.assert_pool_has_free(p, 2) m(raiser, greenlet.GreenletExit) self.assert_pool_has_free(p, 1) p.waitall() self.assert_pool_has_free(p, 2)
def test_no_leaking(self): refs = weakref.WeakKeyDictionary() my_local = corolocal.local() class X(object): pass def do_something(i): o = X() refs[o] = True my_local.foo = o p = GreenPool() for i in xrange(100): p.spawn(do_something, i) p.waitall() del p # at this point all our coros have terminated self.assertEqual(len(refs), 1)
def test_no_leaking (self): refs = weakref.WeakKeyDictionary() my_local = corolocal.local() class X(object): pass def do_something (i): o = X() refs[o] = True my_local.foo = o p = GreenPool() for i in xrange(100): p.spawn(do_something, i) p.waitall() del p # at this point all our coros have terminated self.assertEqual(len(refs), 1)
def test_create_contention(self): creates = [0] def sleep_create(): creates[0] += 1 sleep() return "slept" p = pools.Pool(max_size=4, create=sleep_create) def do_get(): x = p.get() self.assertEquals(x, "slept") p.put(x) gp = GreenPool() for i in xrange(100): gp.spawn_n(do_get) gp.waitall() self.assertEquals(creates[0], 4)
def test_create_contention (self): creates = [0] def sleep_create (): creates[0] += 1 sleep() return "slept" p = pools.Pool(max_size = 4, create = sleep_create) def do_get (): x = p.get() self.assertEquals(x, "slept") p.put(x) gp = GreenPool() for i in xrange(100): gp.spawn_n(do_get) gp.waitall() self.assertEquals(creates[0], 4)
def test_waitall_on_nothing(self): p = GreenPool() p.waitall()