summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-11-21 18:11:23 +0100
committerVictor Stinner <victor.stinner@gmail.com>2014-11-21 18:11:23 +0100
commitd8d4824afac4e79ed4326f237f0768c1debfcbd0 (patch)
tree3a99915867b77ddfe9059cb85576a4d240a36c72
parent529e5e73dc8f61e956970d1c1d3edc913c5fa679 (diff)
downloadaioeventlet-d8d4824afac4e79ed4326f237f0768c1debfcbd0.tar.gz
In debug mode, wrap_greenthread() now logs a warning if the greenthead is
running
-rw-r--r--aiogreen.py7
-rw-r--r--doc/status.rst2
-rw-r--r--tests/__init__.py4
-rw-r--r--tests/test_eventlet.py15
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)