Releases: MagicStack/uvloop
v0.9.1
-
Stop using malloc for
uv_request*handlers. -
Fix
loop.add_reader(),loop.add_writer(),loop.remove_reader(),
andloop.remove_writer()to better track socket objects. -
Fix
loop.sock_recv(),loop.sock_sendall(),loop.sock_recv_into(),
andloop.sock_connect()to correctly handleTask.cancel(). -
Better handle immediate cancellation of
loop.create_connection(). -
Make unit tests stricter: ensure
loop.call_exception_handler()
does not get called, unless it's expected.
v0.9.0
TCP & UDP Transports
-
transport.get_extra_info('socket')now returns a socket-like
object. It supports socket methods likesetsockopts(), but
prohibitssend(),recv(),close()and any other calls that
can interfere with the transport that ultimately owns this file
descriptor. -
TCP_NODELAYis used by default for all TCP connections. -
Make
Transport.resume_reading()andpause_reading()idempotent.
This will match asyncio in Python 3.7. Issue #93. -
loop.create_server()keeps a strong reference to theServer
object it returns until its closed. Fixes #81. -
Fix
loop.connect_accepted_socket()to return correct SSL
transport. -
The UDP transport layer was rewritten from scratch. Now it uses
uv_poll_*libuv APIs, instead of high-leveluv_udp_*ones.
This could mean a slight performance regression, and will be
reverted when we port uvloop to Windows. For now this is
the only viable option to make uvloop fully compatible with asyncio.
When libuv gets an API to connect UDP sockets,uv_udp_connect(),
we'll be able to switch to a better UDP implementation. Issue #109. -
UDPTransport.sendto(data, addr)will raise an exception if
addrrequires a name resolution. Issue #91.
Low-level sockets
-
loop.add_reader()andloop.add_writer()accept file-like
objects. Issue #97. -
loop.sock_connect()supports 4 element address tuples for
IPv6 sockets. Issue #99. -
Protect sockets from closing while they are in use by
loop.sock_*()methods. Close all reader/writer sockets the
loop owns when it closes. Issue #100.
Other event loop APIs
-
loop.run_until_complete()cleans up done callbacks in all
situations. By @jimmylai.
See also Python issue: https://bugs.python.org/issue30423. -
New
uv_loop_fork()libuv API is used inloop.subprocess_shell()
andloop.subprocess_exec()making them more stable. Issue #39. -
loop.call_later()accepts infinite timefloat('inf').
Issue #102. -
loop.subprocess_exec()acceptspathlib.Pathobjects for its
cwdparameter. Issue #90. -
Support
pathlib.Pathobjects inloop.create_unix_connection()
andloop.create_unix_server(). -
Try removing existing stale Unix socket paths in
loop.create_unix_server(). -
asciiencoding is tried before encoding withidna.
Issue #95. -
Fix
slow_callback_durationrepr in warnings for callback handles
and Tasks. Issue #103.
Python 3.7
Some APIs that will be available in Python 3.7 in vanilla asyncio,
but can be used with uvloop today.
-
Implement
.cancelled()method for callback and timer handles. -
Add
Transport.is_reading(). -
Implement
loop.sock_recv_into(). -
Python 3.7.0a1 is now supported. Issue #110.
Miscellaneous
-
Drop custom uvloop Future and Task implementations. This means
that there will be a tiny performance regression for Python 3.5
deploys. -
Limit stack traces in debug mode to make it faster.
-
signal.siginterruptis now used by signals machinery to let
system calls to be repeated by default, instead of raising an
EINTR.
Build
-
libuv in uvloop has been upgraded from v1.11.0 to v1.17.0. Aside
from bug fixes and performance improvements, libuv survives
fork. -
LIBUV_CONFIGURE_HOSTenvironment variable can be used to
cross-compile uvloop/libuv. By @cmcqueen, for issue #104. -
Cyhton was upgraded from 0.25.2 to 0.27.3.
-
uvloop binary is linked with
pthread. By @frederikaalund,
for issue #87.
v0.8.1
v0.8.0
v0.7.0
v0.6.7
v0.6.5
v0.6.1
- Use `asyncio.isfuture()` directly. - Use `asyncio._set_running_loop()` and `_get_running_loop()` introduced in Python 3.6. This enables new behaviour of asyncio.get_event_loop(). - Fix `loop.create_server()`, `loop.create_connection()`, `loop.create_datagram_endpoint()`, and `loop.connect_accepted_socket()` to accept only socket kinds they support. So `create_server()` will raise a ValueError if it receives an `AF_UNIX` socket. This is how asyncio will behave in Python 3.6 and in the next bugfix release of 3.5. - Fix `loop.create_unix_server()` and `loop.create_unix_connection()` to correctly check for `SOCK_STREAM` on Linux, where socket type is a bit mask. - Rework the build infrastructure, moving all logic from the Makefile to setup.py.