mirror of
https://github.com/python/cpython.git
synced 2025-08-03 08:34:29 +00:00
Merge 3.4
asyncio: sync with Tulip - Tulip issue 185: Add a create_task() method to event loops. The create_task() method can be overriden in custom event loop to implement their own task class. For example, greenio and Pulsar projects use their own task class. The create_task() method is now preferred over creating directly task using the Task class. - tests: fix a warning - fix typo in the name of a test function - Update AbstractEventLoop: add new event loop methods; update also the unit test Update asyncio documentation - Document the new create_task() method - "Hide" the Task class: point to the create_task() method for interoperability - Rewrite the documentation of the Task class - Document the "Pending task destroyed" - Update output in debug mode of examples in the dev section - Replace Task() with create_task() in examples
This commit is contained in:
commit
4532c43e16
13 changed files with 194 additions and 54 deletions
|
@ -12,6 +12,7 @@ from test.support import IPV6_ENABLED
|
|||
|
||||
import asyncio
|
||||
from asyncio import base_events
|
||||
from asyncio import events
|
||||
from asyncio import constants
|
||||
from asyncio import test_utils
|
||||
|
||||
|
@ -526,6 +527,29 @@ class BaseEventLoopTests(test_utils.TestCase):
|
|||
PYTHONASYNCIODEBUG='1')
|
||||
self.assertEqual(stdout.rstrip(), b'False')
|
||||
|
||||
def test_create_task(self):
|
||||
class MyTask(asyncio.Task):
|
||||
pass
|
||||
|
||||
@asyncio.coroutine
|
||||
def test():
|
||||
pass
|
||||
|
||||
class EventLoop(base_events.BaseEventLoop):
|
||||
def create_task(self, coro):
|
||||
return MyTask(coro, loop=loop)
|
||||
|
||||
loop = EventLoop()
|
||||
self.set_event_loop(loop)
|
||||
|
||||
coro = test()
|
||||
task = asyncio.async(coro, loop=loop)
|
||||
self.assertIsInstance(task, MyTask)
|
||||
|
||||
# make warnings quiet
|
||||
task._log_destroy_pending = False
|
||||
coro.close()
|
||||
|
||||
|
||||
class MyProto(asyncio.Protocol):
|
||||
done = None
|
||||
|
|
|
@ -1968,8 +1968,12 @@ class AbstractEventLoopTests(unittest.TestCase):
|
|||
NotImplementedError, loop.stop)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.is_running)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.is_closed)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.close)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.create_task, None)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.call_later, None, None)
|
||||
self.assertRaises(
|
||||
|
@ -2027,6 +2031,16 @@ class AbstractEventLoopTests(unittest.TestCase):
|
|||
mock.sentinel)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.subprocess_exec, f)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.set_exception_handler, f)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.default_exception_handler, f)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.call_exception_handler, f)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.get_debug)
|
||||
self.assertRaises(
|
||||
NotImplementedError, loop.set_debug, f)
|
||||
|
||||
|
||||
class ProtocolsAbsTests(unittest.TestCase):
|
||||
|
|
|
@ -301,12 +301,12 @@ class FutureTests(test_utils.TestCase):
|
|||
def test_future_exception_never_retrieved(self, m_log):
|
||||
self.loop.set_debug(True)
|
||||
|
||||
def memroy_error():
|
||||
def memory_error():
|
||||
try:
|
||||
raise MemoryError()
|
||||
except BaseException as exc:
|
||||
return exc
|
||||
exc = memroy_error()
|
||||
exc = memory_error()
|
||||
|
||||
future = asyncio.Future(loop=self.loop)
|
||||
source_traceback = future._source_traceback
|
||||
|
|
|
@ -233,6 +233,9 @@ class TaskTests(test_utils.TestCase):
|
|||
self.assertRegex(repr(task),
|
||||
'<Task .* wait_for=%s>' % re.escape(repr(fut)))
|
||||
|
||||
fut.set_result(None)
|
||||
self.loop.run_until_complete(task)
|
||||
|
||||
def test_task_basics(self):
|
||||
@asyncio.coroutine
|
||||
def outer():
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue