Start to write Tulip 3.4.2 changelog
This commit is contained in:
157
ChangeLog
Normal file
157
ChangeLog
Normal file
@@ -0,0 +1,157 @@
|
||||
Tulip 3.4.2
|
||||
===========
|
||||
|
||||
New shiny methods like create_task(), better documentation, much better debug
|
||||
mode, better tests.
|
||||
|
||||
asyncio API
|
||||
-----------
|
||||
|
||||
* Add BaseEventLoop.create_task() method: schedule a coroutine object.
|
||||
It allows other asyncio implementations to use their own Task class to
|
||||
change its behaviour.
|
||||
|
||||
* New BaseEventLoop methods:
|
||||
|
||||
- create_task(): schedule a coroutine
|
||||
- get_debug()
|
||||
- is_closed()
|
||||
- set_debug()
|
||||
|
||||
* Add _FlowControlMixin.get_write_buffer_limits() method
|
||||
|
||||
* sock_recv(), sock_sendall(), sock_connect(), sock_accept() methods of
|
||||
SelectorEventLoop now raise an exception if the socket is blocking mode
|
||||
|
||||
* Include unix_events/windows_events symbols in asyncio.__all__.
|
||||
Examples: SelectorEventLoop, ProactorEventLoop, DefaultEventLoopPolicy.
|
||||
|
||||
* attach(), detach(), loop, active_count and waiters attributes of the Server
|
||||
class are now private
|
||||
|
||||
* BaseEventLoop: run_forever(), run_until_complete() now raises an exception if
|
||||
the event loop was closed
|
||||
|
||||
* close() now raises an exception if the event loop is running, because pending
|
||||
callbacks would be lost
|
||||
|
||||
* Queue now accepts a float for the maximum size.
|
||||
|
||||
* Process.communicate() now ignores BrokenPipeError and ConnectionResetError
|
||||
exceptions, as Popen.communicate() of the subprocess module
|
||||
|
||||
|
||||
Performances
|
||||
------------
|
||||
|
||||
* Optimize handling of cancelled timers
|
||||
|
||||
|
||||
Debug
|
||||
-----
|
||||
|
||||
* Future (and Task), CoroWrapper and Handle now remembers where they were
|
||||
created (new _source_traceback object), traceback displayed when errors are
|
||||
logged.
|
||||
|
||||
* On Python 3.4 and newer, Task destrutor now logs a warning if the task was
|
||||
destroyed while it was still pending. It occurs if the last reference
|
||||
to the task was removed, while the coroutine didn't finish yet.
|
||||
|
||||
* Much more useful events are logged:
|
||||
|
||||
- Event loop closed
|
||||
- Network connection
|
||||
- Creation of a subprocess
|
||||
- Pipe lost
|
||||
- Log many errors previously silently ignored
|
||||
- SSL handshake failure
|
||||
- etc.
|
||||
|
||||
* BaseEventLoop._debug is now True if the envrionement variable
|
||||
PYTHONASYNCIODEBUG is set
|
||||
|
||||
* Log the duration of DNS resolution and SSL handshake
|
||||
|
||||
* Log a warning if a callback blocks the event loop longer than 100 ms
|
||||
(configurable duration)
|
||||
|
||||
* repr(CoroWrapper) and repr(Task) now contains the current status of the
|
||||
coroutine (running, done), current filename and line number, and filename and
|
||||
line number where the object was created
|
||||
|
||||
* Enhance representation (repr) of transports: add the file descriptor, status
|
||||
(idle, polling, writing, etc.), size of the write buffer, ...
|
||||
|
||||
* Add repr(BaseEventLoop)
|
||||
|
||||
* run_until_complete() doesn't log a warning anymore when called with a
|
||||
coroutine object which raises an exception.
|
||||
|
||||
|
||||
Bugfixes
|
||||
--------
|
||||
|
||||
* windows_utils.socketpair() now ensures that sockets are closed in case
|
||||
of error.
|
||||
|
||||
* Rewrite bricks of the IocpProactor() to make it more reliable
|
||||
|
||||
* IocpProactor destructor now closes it.
|
||||
|
||||
* _OverlappedFuture.set_exception() now cancels the overlapped operation.
|
||||
|
||||
* Rewrite _WaitHandleFuture:
|
||||
|
||||
- cancel() is now able to signal the cancellation to the overlapped object
|
||||
- _unregister_wait() now catchs and logs exceptions
|
||||
|
||||
* PipeServer.close() (class used on Windows) now cancels the accept pipe
|
||||
future.
|
||||
|
||||
* Rewrite signal handling in the UNIX implementation of SelectorEventLoop:
|
||||
use the self-pipe to store pending signals instead of registering a
|
||||
signal handler calling directly _handle_signal(). The change fixes a
|
||||
race condition.
|
||||
|
||||
* create_unix_server(): close the socket on error.
|
||||
|
||||
* Fix wait_for()
|
||||
|
||||
* Rewrite gather()
|
||||
|
||||
* drain() is now a classic coroutine, no more special return value (empty
|
||||
tuple)
|
||||
|
||||
* Rewrite SelectorEventLoop.sock_connect() to handle correctly timeout
|
||||
|
||||
* Process data of the self-pipe faster to accept more pending events,
|
||||
especially signals written by signal handlers: the callback reads all pending
|
||||
data, not only a single byte
|
||||
|
||||
* Don't try to set the result of a Future anymore if it was cancelled
|
||||
(explicitly or by a timeout)
|
||||
|
||||
* CoroWrapper now works around CPython issue #21209: yield from & custom
|
||||
generator classes don't work together, issue with the send() method. It only
|
||||
affected asyncio in debug mode on Python older than 3.4.2
|
||||
|
||||
|
||||
Misc changes
|
||||
------------
|
||||
|
||||
* windows_utils.socketpair() now supports IPv6.
|
||||
|
||||
* Better documentation (online & docstrings): fill remaining XXX, more examples
|
||||
|
||||
* new asyncio.coroutines submodule, to ease maintenance with the trollius
|
||||
project: @coroutine, _DEBUG, iscoroutine() and iscoroutinefunction() have
|
||||
been moved from asyncio.tasks to asyncio.coroutines
|
||||
|
||||
* Cleanup code, ex: remove unused attribute (ex: _rawsock)
|
||||
|
||||
* Reuse os.set_blocking() of Python 3.5.
|
||||
|
||||
* Close explicitly the event loop in Tulip examples.
|
||||
|
||||
* runtests.py now mention if tests are running in release or debug mode.
|
||||
Reference in New Issue
Block a user