Timeouts get porpagated out of tpool.execute.
This commit is contained in:
5
NEWS
5
NEWS
@@ -2,11 +2,12 @@
|
||||
======
|
||||
* ZeroMQ support without an explicit hub now implemented! Thanks to Zed Shaw for the patch.
|
||||
* zmq module supports the NOBLOCK flag, thanks to rfk. (#76)
|
||||
* eventlet.wsgi has a debug flag which can be set to false to not send tracebacks to the client
|
||||
* Recursive GreenPipe madeness forestalled by Soren Hansen (#77)
|
||||
* eventlet.wsgi has a debug flag which can be set to false to not send tracebacks to the client (per redbo's request)
|
||||
* Recursive GreenPipe madness forestalled by Soren Hansen (#77)
|
||||
* eventlet.green.ssl no longer busywaits on send()
|
||||
* EEXIST ignored in epoll hub (#80)
|
||||
* eventlet.listen's behavior on Windows improved, thanks to Nick Vatamaniuc (#83)
|
||||
* Timeouts raised within tpool.execute are propagated back to the caller (thanks again to redbo for being the squeaky wheel)
|
||||
|
||||
0.9.14
|
||||
======
|
||||
|
@@ -21,6 +21,7 @@ from eventlet import event
|
||||
from eventlet import greenio
|
||||
from eventlet import greenthread
|
||||
from eventlet import patcher
|
||||
from eventlet import timeout
|
||||
threading = patcher.original('threading')
|
||||
Queue_module = patcher.original('Queue')
|
||||
Queue = Queue_module.Queue
|
||||
@@ -58,7 +59,7 @@ def tpool_trampoline():
|
||||
|
||||
|
||||
SYS_EXCS = (KeyboardInterrupt, SystemExit)
|
||||
|
||||
EXC_CLASSES = (Exception, timeout.Timeout)
|
||||
|
||||
def tworker(reqq):
|
||||
global _rspq
|
||||
@@ -75,7 +76,7 @@ def tworker(reqq):
|
||||
rv = meth(*args,**kwargs)
|
||||
except SYS_EXCS:
|
||||
raise
|
||||
except Exception:
|
||||
except EXC_CLASSES:
|
||||
rv = sys.exc_info()
|
||||
# test_leakage_from_tracebacks verifies that the use of
|
||||
# exc_info does not lead to memory leaks
|
||||
@@ -116,7 +117,9 @@ def execute(meth,*args, **kwargs):
|
||||
reqq.put((e,meth,args,kwargs))
|
||||
|
||||
rv = e.wait()
|
||||
if isinstance(rv,tuple) and len(rv) == 3 and isinstance(rv[1],Exception):
|
||||
if isinstance(rv,tuple) \
|
||||
and len(rv) == 3 \
|
||||
and isinstance(rv[1],EXC_CLASSES):
|
||||
import traceback
|
||||
(c,e,tb) = rv
|
||||
if not QUIET:
|
||||
|
@@ -270,6 +270,12 @@ class TestTpool(LimitedTestCase):
|
||||
for r in x(3):
|
||||
self.assertEquals(3, r)
|
||||
|
||||
@skip_with_pyevent
|
||||
def test_eventlet_timeout(self):
|
||||
def raise_timeout():
|
||||
raise eventlet.Timeout()
|
||||
self.assertRaises(eventlet.Timeout, tpool.execute, raise_timeout)
|
||||
|
||||
class TpoolLongTests(LimitedTestCase):
|
||||
TEST_TIMEOUT=60
|
||||
@skip_with_pyevent
|
||||
|
Reference in New Issue
Block a user