18
25
self.shot_count += 1
20
28
class Test(greentest.TestCase):
22
30
def test_basic(self):
24
s = pool.GreenletSet()
25
33
s.spawn(gevent.sleep, DELAY)
27
s.spawn(gevent.sleep, DELAY*2.)
29
gevent.sleep(DELAY*3./2.)
35
s.spawn(gevent.sleep, DELAY * 2.)
37
gevent.sleep(DELAY * 3. / 2.)
31
39
gevent.sleep(DELAY)
34
42
def test_waitall(self):
35
s = pool.GreenletSet()
36
44
s.spawn(gevent.sleep, DELAY)
37
s.spawn(gevent.sleep, DELAY*2)
45
s.spawn(gevent.sleep, DELAY * 2)
39
47
start = time.time()
40
48
s.join(raise_error=True)
41
49
delta = time.time() - start
44
assert DELAY*1.9 <= delta <= DELAY*2.5, (delta, DELAY)
52
assert DELAY * 1.9 <= delta <= DELAY * 2.5, (delta, DELAY)
46
54
def test_kill_block(self):
47
s = pool.GreenletSet()
48
56
s.spawn(gevent.sleep, DELAY)
49
s.spawn(gevent.sleep, DELAY*2)
57
s.spawn(gevent.sleep, DELAY * 2)
51
59
start = time.time()
55
63
delta = time.time() - start
56
assert delta < DELAY*0.5, delta
64
assert delta < DELAY * 0.8, delta
58
66
def test_kill_noblock(self):
59
s = pool.GreenletSet()
60
68
s.spawn(gevent.sleep, DELAY)
61
s.spawn(gevent.sleep, DELAY*2)
69
s.spawn(gevent.sleep, DELAY * 2)
63
71
s.kill(block=False)
69
77
def test_kill_fires_once(self):
72
80
p1 = gevent.spawn(u1)
73
81
p2 = gevent.spawn(u2)
74
83
def check(count1, count2):
78
87
assert not p2.dead, p2
79
88
self.assertEqual(u1.shot_count, count1)
80
89
self.assertEqual(u2.shot_count, count2)
82
s = pool.GreenletSet([p1, p2])
92
s = pool.Group([p1, p2])
83
93
assert len(s) == 2, s
85
95
s.killone(p1, block=False)
102
112
assert len(s) == 2, s
115
p1.kill(SpecialError)
116
p2.kill(SpecialError)
105
118
def test_killall_subclass(self):
106
p1 = GreenletSubclass.spawn(lambda : 1/0)
107
p2 = GreenletSubclass.spawn(lambda : gevent.sleep(10))
108
s = pool.GreenletSet([p1, p2])
119
p1 = GreenletSubclass.spawn(lambda: 1 / 0)
120
p2 = GreenletSubclass.spawn(lambda: gevent.sleep(10))
121
s = pool.Group([p1, p2])
112
125
class GreenletSubclass(gevent.Greenlet):
116
if __name__=='__main__':
129
if __name__ == '__main__':