diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2014-11-21 18:11:23 +0100 |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2014-11-21 18:11:23 +0100 |
commit | d8d4824afac4e79ed4326f237f0768c1debfcbd0 (patch) | |
tree | 3a99915867b77ddfe9059cb85576a4d240a36c72 | |
parent | 529e5e73dc8f61e956970d1c1d3edc913c5fa679 (diff) | |
download | aioeventlet-d8d4824afac4e79ed4326f237f0768c1debfcbd0.tar.gz |
In debug mode, wrap_greenthread() now logs a warning if the greenthead is
running
-rw-r--r-- | aiogreen.py | 7 | ||||
-rw-r--r-- | doc/status.rst | 2 | ||||
-rw-r--r-- | tests/__init__.py | 4 | ||||
-rw-r--r-- | tests/test_eventlet.py | 15 |
4 files changed, 26 insertions, 2 deletions
diff --git a/aiogreen.py b/aiogreen.py index 8fc643e..988b9cc 100644 --- a/aiogreen.py +++ b/aiogreen.py @@ -1,9 +1,12 @@ import eventlet.hubs.hub import greenlet +import logging import sys socket = eventlet.patcher.original('socket') threading = eventlet.patcher.original('threading') +logger = logging.getLogger('aiogreen') + try: import asyncio @@ -243,6 +246,10 @@ def wrap_greenthread(gt, loop=None): fut = asyncio.Future(loop=loop) if isinstance(gt, eventlet.greenthread.GreenThread): + if loop.get_debug() and gt: + logger.warning("wrap_greenthread() called on " + "a running greenthread") + def copy_result(gt): try: result = gt.wait() diff --git a/doc/status.rst b/doc/status.rst index 21e4f71..7b0802d 100644 --- a/doc/status.rst +++ b/doc/status.rst @@ -1,8 +1,6 @@ To do ===== -* doesn't make sense to call wrap_greenthread() from the running greenthread? - (it works for greenthreads, but it doesn't work for greenlets) * wrap_greenthread() must not log the exception to sys.stderr if the greenthread didn't start * register signals in eventlet hub, only needed for pyevent hub? diff --git a/tests/__init__.py b/tests/__init__.py index 5843e5f..42a7e20 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -8,6 +8,10 @@ try: import unittest2 as unittest except ImportError: import unittest +try: + from unittest.mock import mock +except ImportError: + import mock class TestCase(unittest.TestCase): def setUp(self): diff --git a/tests/test_eventlet.py b/tests/test_eventlet.py index 8105cf2..07dde9d 100644 --- a/tests/test_eventlet.py +++ b/tests/test_eventlet.py @@ -187,12 +187,26 @@ class WrapGreenthreadTests(tests.TestCase): def func(): return aiogreen.wrap_greenthread(gt) + self.loop.set_debug(False) gt = eventlet.spawn(func) fut1 = aiogreen.wrap_greenthread(gt) fut2 = self.loop.run_until_complete(fut1) fut3 = self.loop.run_until_complete(fut2) self.assertIs(fut3, fut2) + @tests.mock.patch('aiogreen.logger') + def test_wrap_greenthread_running_log(self, m_log): + def func(): + return aiogreen.wrap_greenthread(gt) + + self.loop.set_debug(True) + gt = eventlet.spawn(func) + fut1 = aiogreen.wrap_greenthread(gt) + fut2 = self.loop.run_until_complete(fut1) + m_log.warning.assert_called_with("wrap_greenthread() called on " + "a running greenthread") + + def test_wrap_greenthread_dead(self): def func(): return 'ok' @@ -218,6 +232,7 @@ class WrapGreenthreadTests(tests.TestCase): def coro_func(): pass coro_obj = coro_func() + self.addCleanup(coro_obj.close) self.assertRaises(TypeError, aiogreen.wrap_greenthread, coro_obj) |