tpool: make sure we return results during killall
since we are about to delete the _rspq
This commit is contained in:

committed by
Sergey Shepelev

parent
bab1116809
commit
52d42dd741
@@ -292,6 +292,16 @@ def killall():
|
||||
for thr in _threads:
|
||||
thr.join()
|
||||
del _threads[:]
|
||||
|
||||
# return any remaining results
|
||||
while not _rspq.empty():
|
||||
try:
|
||||
(e, rv) = _rspq.get(block=False)
|
||||
e.send(rv)
|
||||
e = rv = None
|
||||
except Empty:
|
||||
pass
|
||||
|
||||
if _coro is not None:
|
||||
greenthread.kill(_coro)
|
||||
_rsock.close()
|
||||
|
@@ -20,7 +20,7 @@ import re
|
||||
import time
|
||||
|
||||
import eventlet
|
||||
from eventlet import tpool
|
||||
from eventlet import tpool, debug, event
|
||||
from eventlet.support import six
|
||||
from tests import LimitedTestCase, skipped, skip_with_pyevent, main
|
||||
|
||||
@@ -228,6 +228,22 @@ class TestTpool(LimitedTestCase):
|
||||
tpool.killall()
|
||||
tpool.setup()
|
||||
|
||||
@skip_with_pyevent
|
||||
def test_killall_remaining_results(self):
|
||||
semaphore = event.Event()
|
||||
|
||||
def native_fun():
|
||||
time.sleep(.5)
|
||||
|
||||
def gt_fun():
|
||||
semaphore.send(None)
|
||||
tpool.execute(native_fun)
|
||||
|
||||
gt = eventlet.spawn(gt_fun)
|
||||
semaphore.wait()
|
||||
tpool.killall()
|
||||
gt.wait()
|
||||
|
||||
@skip_with_pyevent
|
||||
def test_autowrap(self):
|
||||
x = tpool.Proxy({'a': 1, 'b': 2}, autowrap=(int,))
|
||||
|
Reference in New Issue
Block a user