Commit 790d6e12 authored by Jason Madden's avatar Jason Madden

Tweak changenote. [skip ci]

parent fc42ffe5
...@@ -50,11 +50,11 @@ Platform Support ...@@ -50,11 +50,11 @@ Platform Support
on POSIX platforms under Python 3.6. Now it also works on Windows under on POSIX platforms under Python 3.6. Now it also works on Windows under
Python 3.6 (as expected) and is backported to all previous versions. Python 3.6 (as expected) and is backported to all previous versions.
- Linux CI now tests on PyPy3 3.5-5.8.0, updated from PyPy3 3.5-5.7.1. - Linux CI now tests on PyPy3 3.5-5.9.0, updated from PyPy3 3.5-5.7.1.
See :issue:`1001`. PyPy2 has been updated to 5.8.0 from 5.7.1, See :issue:`1001`. PyPy2 has been updated to 5.9.0 from 5.7.1,
Python 2.7 has been updated to 2.7.14 from 2.7.13, Python 3.4 is Python 2.7 has been updated to 2.7.14 from 2.7.13, Python 3.4 is
updated to 3.4.7 from 3.4.5, Python 3.5 is now 3.5.4 from 3.5.3, and updated to 3.4.7 from 3.4.5, Python 3.5 is now 3.5.4 from 3.5.3, and
Python 3.6 is now 3.6.2 from 3.6.0. Python 3.6 is now 3.6.4 from 3.6.0.
- Drop support for Python 3.3. The documentation has only claimed - Drop support for Python 3.3. The documentation has only claimed
support for 3.4+ since gevent 1.2 was released, and only 3.4+ has support for 3.4+ since gevent 1.2 was released, and only 3.4+ has
...@@ -68,7 +68,7 @@ Platform Support ...@@ -68,7 +68,7 @@ Platform Support
earlier (without a modern SSL implementation) has been dropped. earlier (without a modern SSL implementation) has been dropped.
These versions are no longer tested with gevent, but gevent can These versions are no longer tested with gevent, but gevent can
still be installed on them. Supporting code will be removed in the still be installed on them. Supporting code will be removed in the
next version of gevent. See :issue:`1073`. next major version of gevent. See :issue:`1073`.
Build Changes Build Changes
------------- -------------
...@@ -77,26 +77,17 @@ Build Changes ...@@ -77,26 +77,17 @@ Build Changes
source distribution), ``make`` is no longer required and the source distribution), ``make`` is no longer required and the
``Makefile`` is not used. Neither is an external ``cython`` command. ``Makefile`` is not used. Neither is an external ``cython`` command.
Instead, the ``cythonize`` function is used, as recommended by Instead, the ``cythonize`` function is used, as recommended by
Cython. See :issue:`1076`. Cython. (The external commands were never required by source
distributions.) See :issue:`1076`.
- :class:`gevent.local.local` is compiled with Cython on CPython. It - :class:`gevent.local.local` is compiled with Cython on CPython.
was already 5 to 6 times faster due to the work on :issue:`1020`,
and compiling it with Cython makes it another 5 to 6 times faster,
for a total speed up of about 35 times. It is now in the same
ballpark as the native :class:`threading.local` class. It also uses
one pointer less memory per object, and one pointer less memory per
greenlet. See :pr:`1024`.
- The Cython ares 'channel' class is no longer declared to be publicly - The Cython ares 'channel' class is no longer declared to be publicly
accessible from a named C structure. Doing so caused a conflict with accessible from a named C structure. Doing so caused a conflict with
the c-ares header files. the c-ares header files.
Other Changes Bug Fixes
------------- ---------
- ``Pool.add`` now accepts ``blocking`` and ``timeout`` parameters,
which function similarly to their counterparts in ``Semaphore``.
See :pr:`1032` by Ron Rothman.
- If a single greenlet created and destroyed many - If a single greenlet created and destroyed many
:class:`gevent.local.local` objects without ever exiting, there :class:`gevent.local.local` objects without ever exiting, there
...@@ -104,25 +95,6 @@ Other Changes ...@@ -104,25 +95,6 @@ Other Changes
locals after the greenlet exited. Introduce a weak reference to locals after the greenlet exited. Introduce a weak reference to
avoid that. Reported in :issue:`981` by Heungsub Lee. avoid that. Reported in :issue:`981` by Heungsub Lee.
- Defer adjusting the stdlib's list of active threads until
``threading`` is monkey patched. Previously this was done when
:mod:`gevent.threading` was imported. That module is documented to
be used as a helper for monkey patching, so this should generally
function the same, but some applications ignore the documentation
and directly import that module anyway.
A positive consequence is that ``import gevent.threading, threading;
threading.current_thread()`` will no longer return a DummyThread
before monkey-patching. Another positive consequence is that PyPy
will no longer print a ``KeyError`` on exit if
:mod:`gevent.threading` was imported *without* monkey-patching.
See :issue:`984`.
- Specify the Requires-Python metadata for improved installation
support in certain tools (setuptools v24.2.1 or newer is required).
See :issue:`995`.
- pywsgi also catches and ignores by default - pywsgi also catches and ignores by default
:const:`errno.WSAECONNABORTED` on Windows. Initial patch in :const:`errno.WSAECONNABORTED` on Windows. Initial patch in
:pr:`999` by Jan van Valburg. :pr:`999` by Jan van Valburg.
...@@ -142,6 +114,42 @@ Other Changes ...@@ -142,6 +114,42 @@ Other Changes
universal newline mode on Python 2. This is consistent with what universal newline mode on Python 2. This is consistent with what
:class:`.FileObjectThread` does. See :issue:`1039`. :class:`.FileObjectThread` does. See :issue:`1039`.
- ``socket.send()`` now catches ``EPROTOTYPE`` on macOS to handle a race
condition during shutdown. Fixed in :pr:`1035` by Jay Oster.
- :func:`gevent.socket.create_connection` now properly cleans up open
sockets if connecting or binding raises a :exc:`BaseException` like
:exc:`KeyboardInterrupt`, :exc:`greenlet.GreenletExit` or
:exc:`gevent.timeout.Timeout`. Reported in :issue:`1044` by
kochelmonster.
Other Changes
-------------
- ``Pool.add`` now accepts ``blocking`` and ``timeout`` parameters,
which function similarly to their counterparts in ``Semaphore``.
See :pr:`1032` by Ron Rothman.
- Defer adjusting the stdlib's list of active threads until
``threading`` is monkey patched. Previously this was done when
:mod:`gevent.threading` was imported. That module is documented to
be used as a helper for monkey patching, so this should generally
function the same, but some applications ignore the documentation
and directly import that module anyway.
A positive consequence is that ``import gevent.threading, threading;
threading.current_thread()`` will no longer return a DummyThread
before monkey-patching. Another positive consequence is that PyPy
will no longer print a ``KeyError`` on exit if
:mod:`gevent.threading` was imported *without* monkey-patching.
See :issue:`984`.
- Specify the Requires-Python metadata for improved installation
support in certain tools (setuptools v24.2.1 or newer is required).
See :issue:`995`.
- Monkey-patching after the :mod:`ssl` module has been imported now - Monkey-patching after the :mod:`ssl` module has been imported now
prints a warning because this can produce ``RecursionError``. prints a warning because this can produce ``RecursionError``.
...@@ -150,19 +158,18 @@ Other Changes ...@@ -150,19 +158,18 @@ Other Changes
implementing more of the attribute protocols directly. Please open implementing more of the attribute protocols directly. Please open
an issue if you have any compatibility problems. See :issue:`1020`. an issue if you have any compatibility problems. See :issue:`1020`.
- :class:`gevent.local.local` is compiled with Cython on CPython. It
was already 5 to 6 times faster due to the work on :issue:`1020`,
and compiling it with Cython makes it another 5 to 6 times faster,
for a total speed up of about 35 times. It is now in the same
ballpark as the native :class:`threading.local` class. It also uses
one pointer less memory per object, and one pointer less memory per
greenlet. See :pr:`1024`.
- More safely terminate subprocesses on Windows with - More safely terminate subprocesses on Windows with
:meth:`gevent.subprocess.Popen.terminate`. Reported in :issue:`1023` :meth:`gevent.subprocess.Popen.terminate`. Reported in :issue:`1023`
by Giacomo Debidda. by Giacomo Debidda.
- ``socket.send()`` now catches ``EPROTOTYPE`` on macOS to handle a race
condition during shutdown. Fixed in :pr:`1035` by Jay Oster.
- :func:`gevent.socket.create_connection` now properly cleans up open
sockets if connecting or binding raises a :exc:`BaseException` like
:exc:`KeyboardInterrupt`, :exc:`greenlet.GreenletExit` or
:exc:`gevent.timeout.Timeout`. Reported in :issue:`1044` by
kochelmonster.
- gevent now uses cffi's "extern 'Python'" callbacks. These should be - gevent now uses cffi's "extern 'Python'" callbacks. These should be
faster and more stable. This requires at least cffi 1.4.0. See :issue:`1049`. faster and more stable. This requires at least cffi 1.4.0. See :issue:`1049`.
...@@ -185,6 +192,11 @@ libuv ...@@ -185,6 +192,11 @@ libuv
``GEVENT_CORE_CFFI_ONLY=libuv`` before importing gevent. This ``GEVENT_CORE_CFFI_ONLY=libuv`` before importing gevent. This
suffers a number of limitations compared to libev, notably: suffers a number of limitations compared to libev, notably:
- libuv support is not available in the manylinux wheels uploaded to
PyPI. The manylinux specification requires glibc 2.5, while libuv
requires glibc 2.12. Install from source to access libuv on Linux
(e.g., pip's ``--no-binary`` option).
- Timers (such as ``gevent.sleep`` and ``gevent.Timeout``) only - Timers (such as ``gevent.sleep`` and ``gevent.Timeout``) only
support a resolution of 1ms (in practice, it's closer to 1.5ms). support a resolution of 1ms (in practice, it's closer to 1.5ms).
Attempting to use something smaller will automatically increase it Attempting to use something smaller will automatically increase it
...@@ -213,10 +225,6 @@ libuv ...@@ -213,10 +225,6 @@ libuv
Linux when using ``gevent.select.poll`` or a monkey-patched Linux when using ``gevent.select.poll`` or a monkey-patched
``selectors.PollSelector``. ``selectors.PollSelector``.
- The implementation uses more reference cycles and weak references
than either of the libev implementations (cython or CFFI), so
pressure on the garbage collector will be higher.
- The build system does not support using a system libuv; the - The build system does not support using a system libuv; the
embedded copy must be used. Using setuptools to compile libuv was embedded copy must be used. Using setuptools to compile libuv was
the most portable method found. the most portable method found.
...@@ -301,10 +309,10 @@ libev ...@@ -301,10 +309,10 @@ libev
- Cython is no longer preprocessed. Certain attributes that were - Cython is no longer preprocessed. Certain attributes that were
previously only defined in certain compilation modes (notably previously only defined in certain compilation modes (notably
LIBEV_EMBED) are now always defined, but will raise ``AttributeError`` LIBEV_EMBED) are now always defined, but will raise
or have a negative value when not available. In general these ``AttributeError`` or have a negative value when not available. In
attributes are not portable and not implemented by libuv or the general these attributes are not portable or documented and are
CFFI backend. See :issue:`1076`. not implemented by libuv or the CFFI backend. See :issue:`1076`.
- Certain private helper functions (``gevent_handle_error``, and part of - Certain private helper functions (``gevent_handle_error``, and part of
``gevent_call``) are now implemented in Cython instead of C. This ``gevent_call``) are now implemented in Cython instead of C. This
......
...@@ -37,5 +37,10 @@ cd ./gevent ...@@ -37,5 +37,10 @@ cd ./gevent
pip install -U pip pip install -U pip
pip install -U setuptools cython greenlet cffi pip install -U setuptools cython greenlet cffi
pip install -U wheel pip install -U wheel
# We may need different versions of deps depending on the
# version of python; that's captured in this file.
# we still need to upgrade cython first, though
# because we can get kwargs errors otherwise
pip install -U -r dev-requirements.txt
python ./setup.py sdist bdist_wheel python ./setup.py sdist bdist_wheel
cp dist/*whl /tmp/gevent/ cp dist/*whl /tmp/gevent/
...@@ -19,6 +19,9 @@ mkdir /tmp/gevent/ ...@@ -19,6 +19,9 @@ mkdir /tmp/gevent/
# 3.6 is a python.org build, builds a 10_6_intel wheel # 3.6 is a python.org build, builds a 10_6_intel wheel
./geventrel.sh /usr/local/bin/python3.6 ./geventrel.sh /usr/local/bin/python3.6
# 3.7 is a python.org build, builds a 10_6_intel wheel
./geventrel.sh /usr/local/bin/python3.7
# PyPy 4.0 # PyPy 4.0
./geventrel.sh `which pypy` ./geventrel.sh `which pypy`
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment