1753 lines
90 KiB
Plaintext
1753 lines
90 KiB
Plaintext
-------------------------------------------------------------------
|
||
Wed Oct 23 11:07:00 UTC 2024 - John Paul Adrian Glaubitz <adrian.glaubitz@suse.com>
|
||
|
||
- Update to 24.10.3
|
||
* Fix clearing stack frames on Python 3.13. This is invoked when you
|
||
fork after having used the thread pool.
|
||
* Distribute manylinux2014 wheels for x86_64.
|
||
* Stop switching to the hub in the after fork hook in a child process.
|
||
This could lead to strange behaviour, and is different than what all
|
||
other versions of Python do.
|
||
- from version 24.10.2
|
||
* Workaround a Cython bug compiling on GCC14.
|
||
- Drop gh-2031-cython-workaround.patch, merged upstream
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Oct 10 09:39:52 UTC 2024 - John Paul Adrian Glaubitz <adrian.glaubitz@suse.com>
|
||
|
||
- Update to 24.10.1
|
||
* Update the bundled c-ares to 1.33.1.
|
||
* Add support for Python 3.13.
|
||
- The functions and classes in ``gevent.subprocess`` no longer accept
|
||
``stdout=STDOUT`` and raise a ``ValueError``.
|
||
Several additions and changes to the ``queue`` module, including:
|
||
- ``Queue.shutdown`` is available on all versions of Python.
|
||
- ``LifoQueue`` is now a joinable queue.
|
||
* gevent.monkey changed from a module to a package. The public API
|
||
remains the same.
|
||
For this release, private APIs (undocumented, marked internal, or
|
||
beginning with an underscore) are also preserved. However, these may
|
||
be changed or removed at any time in the future. If you are using one
|
||
of these APIs and cannot replace it, please contact the gevent team.
|
||
* For platforms that don't have ``socketpair``, upgrade our fallback
|
||
code to avoid a security issue.
|
||
See :issue:`2048`.
|
||
* Remove support for Python 3.8, which has reached the end of its
|
||
support lifecycle.
|
||
See :issue:`remove_py38`.
|
||
- Drop gh-113964-fix-tests-3.12.3.patch, fixed upstream
|
||
- Renumber patches
|
||
|
||
-------------------------------------------------------------------
|
||
Tue May 28 10:56:43 UTC 2024 - John Paul Adrian Glaubitz <adrian.glaubitz@suse.com>
|
||
|
||
- Add gh-2031-cython-workaround.patch which fixes a regression
|
||
with Cython 3.0.10 which caused an FTBFS with GCC 14
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Apr 22 07:38:07 UTC 2024 - Daniel Garcia <daniel.garcia@suse.com>
|
||
|
||
- Add gh-113964-fix-tests-3.12.3.patch to tix tests with python 3.12.3
|
||
(bsc#1223128)
|
||
|
||
- Drop upstream patches:
|
||
* gevent-fix-unittest-returncode-py312-c1.patch
|
||
* gevent-fix-unittest-returncode-py312-c2.patch
|
||
|
||
- Update to version 24.2.1:
|
||
- Add support for Python patch releases 3.11.8 and 3.12.2, which
|
||
changed internal details of threading.
|
||
- Errors raised from subprocess.Popen may not have a filename set.
|
||
- SSLSocket.recv_into and SSLSocket.read no longer require the
|
||
buffer to implement len and now work with buffers whose size is
|
||
not 1.
|
||
- gh-108310: Fix CVE-2023-40217: Check for & avoid the ssl pre-close
|
||
flaw.
|
||
- Drop setuptools to a soft test dependency.
|
||
- Drop support for very old versions of CFFI.
|
||
- Update bundled c-ares from 1.19.1 to 1.26.0.
|
||
- Locks created by gevent, but acquired from multiple different
|
||
threads (not recommended), no longer spin to implement timeouts
|
||
and interruptible blocking. Instead, they use the native
|
||
functionality of the Python 3 lock. This may improve some
|
||
scenarios. See issue #2013.
|
||
|
||
-------------------------------------------------------------------
|
||
Wed Jan 10 22:40:39 UTC 2024 - Ben Greiner <code@bnavigator.de>
|
||
|
||
- Clean obsolete old python and old distribution directives
|
||
* Only 15.5+ with the sle15 python module and Tumbleweed have the
|
||
required Python 3.8+
|
||
* Drop fix-no-return-in-nonvoid-function.patch
|
||
- Update test suite execution
|
||
* Use -u-network flag to disable network tests
|
||
* Add gevent-opensuse-nocolor-tests.patch -- Avoid colorization
|
||
of test output in obs runners
|
||
* Add gevent-fix-unittest-returncode-py312-c1.patch and
|
||
gevent-fix-unittest-returncode-py312-c2.patch
|
||
gh#gevent/gevent#2012
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Nov 27 15:53:52 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||
|
||
- update to 23.9.1:
|
||
* Require greenlet 3.0 on Python 3.11 and Python 3.12; greenlet
|
||
3.0 is recommended for all platforms.
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Sep 18 19:07:56 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||
|
||
- update to 23.9.0 (bsc#1215469, CVE-2023-41419):
|
||
* Make ``gevent.select.select`` accept arbitrary iterables, not
|
||
just sequences. That is, you can now pass in a generator of file
|
||
descriptors instead of a realized list. Internally, arbitrary
|
||
iterables are copied into lists. This better matches what the
|
||
standard library does.
|
||
* On Python 3.11 and newer, opt out of Cython's fast exception
|
||
manipulation, which *may* be causing problems in certain
|
||
circumstances when combined with greenlets.
|
||
* On all versions of Python, adjust some error handling in the
|
||
default * -based loop. This fixes several assertion failures
|
||
on debug versions of CPython. Hopefully it has a positive
|
||
impact under real conditions.
|
||
* Make ``gevent.pywsgi`` comply more closely with the HTTP
|
||
specification for chunked transfer encoding. In particular,
|
||
we are much stricter about trailers, and trailers that are
|
||
invalid (too long or featuring disallowed characters) forcibly
|
||
close the connection to the client *after* the results have
|
||
been sent.
|
||
* Trailers otherwise continue to be ignored and are not
|
||
available to the WSGI application.
|
||
Previously, carefully crafted invalid trailers in chunked
|
||
requests on keep-alive connections might appear as two
|
||
requests to ``gevent.pywsgi``. Because this was handled
|
||
exactly as a normal keep-alive connection with two requests,
|
||
the WSGI application should handle it normally. However, if
|
||
you were counting on some upstream server to filter incoming
|
||
requests based on paths or header fields, and the upstream
|
||
server simply passed trailers through without
|
||
validating them, then this embedded second request would
|
||
bypass those checks.
|
||
(If the upstream server validated that the trailers
|
||
meet the* HTTP specification, this could not occur,
|
||
because characters that are required in an HTTP request,
|
||
like a space, are not allowed in trailers.) CVE-2023-41419
|
||
was reserved for this.
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Aug 14 09:20:19 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||
|
||
- update to 23.7.0:
|
||
* Add preliminary support for Python 3.12, using greenlet
|
||
3.0a1.
|
||
* Update the bundled c-ares version to 1.19.1.
|
||
* Fix an edge case connecting a non-blocking ``SSLSocket`` that
|
||
could result in an AttributeError. In a change to match
|
||
the standard library, calling ``sock.connect_ex()`` on a
|
||
subclass of ``socket`` no longer calls the subclass's
|
||
``connect`` method.
|
||
* Make gevent's ``FileObjectThread`` (mostly used on Windows)
|
||
implement ``readinto`` cooperatively.
|
||
* Work around an ``AttributeError`` during cyclic garbage
|
||
collection when Python finalizers (``__del__`` and the like)
|
||
attempt to use gevent APIs. This is not a recommended practice,
|
||
and it is unclear if catching this ``AttributeError`` will fix
|
||
any problems or just shift them.
|
||
* Remove support for obsolete Python versions. This is
|
||
everything prior to 3.8.
|
||
* Stop using ``pkg_resources`` to find entry points (plugins).
|
||
Instead, use ``importlib.metadata``.
|
||
* Honor ``sys.unraisablehook`` when a callback function
|
||
produces an exception, and handling the exception in the hub
|
||
*also* produces an exception.
|
||
- drop skip-tests-in-leap.patch handle-python-ssl-changes.patch (obsolete)
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Jun 9 08:08:57 UTC 2023 - Daniel Garcia <daniel.garcia@suse.com>
|
||
|
||
- skip test__util.py in s390x arch
|
||
bsc#1211861
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Jun 1 07:05:01 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||
|
||
- handle-python-ssl-changes.patch: refresh to handle ssl.shared_ciphers()
|
||
behavior change in python 3.11 as well
|
||
|
||
-------------------------------------------------------------------
|
||
Mon May 15 14:18:03 UTC 2023 - Steve Kowalik <steven.kowalik@suse.com>
|
||
|
||
- Add patch handle-python-ssl-changes.patch:
|
||
* Handle Python 3.10 changes where ssl.shared_ciphers() changes
|
||
behaviour.
|
||
|
||
-------------------------------------------------------------------
|
||
Mon May 15 13:44:48 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||
|
||
- skip one more test from testsuite
|
||
|
||
-------------------------------------------------------------------
|
||
Thu May 4 20:28:36 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||
|
||
- update to 22.10.2:
|
||
* Update to greenlet 2.0. This fixes a deallocation issue that
|
||
required a change in greenlet's ABI. The design of greenlet 2.0 is
|
||
intended to prevent future fixes and enhancements from
|
||
requiring an ABI change, making it easier to update gevent
|
||
and greenlet independently.
|
||
|
||
-------------------------------------------------------------------
|
||
Sun Apr 23 23:15:24 UTC 2023 - Matej Cepl <mcepl@suse.com>
|
||
|
||
- Switch documentation to be within the main package.
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Apr 21 12:25:42 UTC 2023 - Dirk Müller <dmueller@suse.com>
|
||
|
||
- add sle15_python_module_pythons (jsc#PED-68)
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Apr 13 22:41:35 UTC 2023 - Matej Cepl <mcepl@suse.com>
|
||
|
||
- Make calling of %{sle15modernpython} optional.
|
||
|
||
-------------------------------------------------------------------
|
||
Wed Mar 8 15:30:19 UTC 2023 - Matej Cepl <mcepl@suse.com>
|
||
|
||
- Clean up the SPEC file.
|
||
|
||
-------------------------------------------------------------------
|
||
Sun Oct 16 17:41:54 UTC 2022 - Dirk Müller <dmueller@suse.com>
|
||
|
||
- update to 22.10.0:
|
||
* Update bundled libuv to 1.44.2.
|
||
See :issue:`1913`.
|
||
* Upgrade embedded c-ares to 1.18.1.
|
||
* Upgrade bundled libuv to 1.42.0 from 1.40.0.
|
||
* Added preliminary support for Python 3.11 (rc2 and later).
|
||
Some platforms may or may not have binary wheels at this time.
|
||
.. important:: Support for legacy versions of Python, including 2.7
|
||
and 3.6, will be ending soon. The
|
||
maintenance burden has become too great and the
|
||
maintainer's time is too limited.
|
||
|
||
Ideally, there will be a release of gevent compatible
|
||
with a final release of greenlet 2.0 that still
|
||
supports those legacy versions, but that may not be
|
||
possible; this may be the final release to support them.
|
||
:class:`gevent.threadpool.ThreadPool` can now optionally expire idle
|
||
threads. This is used by default in the implicit thread pool used for
|
||
DNS requests and other user-submitted tasks; other uses of a
|
||
thread-pool need to opt-in to this.
|
||
See :issue:`1867`.
|
||
* Truly disable the effects of compiling with ``-ffast-math``.
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Dec 13 20:30:19 UTC 2021 - Ben Greiner <code@bnavigator.de>
|
||
|
||
- Update to 21.12.0
|
||
* Fix hanging the interpreter on shutdown if gevent monkey
|
||
patching occurred on a non-main thread in Python 3.9.8 and
|
||
above. (Note that this is not a recommended practice.) See
|
||
:issue:`1839`.
|
||
* Update the embedded c-ares from 1.16.1 to 1.17.1. See
|
||
:issue:`1758`.
|
||
* Add support for Python 3.10rc1 and newer. As part of this, the
|
||
minimum required greenlet version was increased to 1.1.0 (on
|
||
CPython), and the minimum version of Cython needed to build
|
||
gevent from a source checkout is 3.0a9. Note that the dnspython
|
||
resolver is not available on Python 3.10. See :issue:`1790`.
|
||
- Meanwhile Cython 0.29.24 and dnspython are compatible
|
||
with python310
|
||
- Revert threading test skip, fixed in 21.12
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Nov 19 07:48:57 UTC 2021 - Steve Kowalik <steven.kowalik@suse.com>
|
||
|
||
- Skip test__threading_monkey_in_thread as it breaks with Python 3.9.9.
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Jul 8 05:50:58 UTC 2021 - Antonio Larrosa <alarrosa@suse.com>
|
||
|
||
- Skip two tests that fail in SLE/Leap:
|
||
* skip-tests-in-leap.patch
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Feb 12 10:18:37 UTC 2021 - Pedro Monreal <pmonreal@suse.com>
|
||
|
||
- Relax the crypto policies for the test-suite
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Feb 12 10:10:53 UTC 2021 - Pedro Monreal <pmonreal@suse.com>
|
||
|
||
- Update to 21.1.2:
|
||
* Features:
|
||
- Update the embedded libev from 4.31 to 4.33.
|
||
- Update the embedded libuv from 1.38.0 to 1.40.0.
|
||
- Update to 21.1.1:
|
||
* Bugfixes:
|
||
- Fix a TypeError on startup on Python 2 with zope.schema
|
||
installed.
|
||
- Update to 21.1.0:
|
||
* Bugfixes:
|
||
- Make gevent FileObjects more closely match the semantics of
|
||
native file objects for the name attribute.: Objects opened
|
||
from a file descriptor integer have that integer as their
|
||
name. (Note that this is the Python 3 semantics; Python 2
|
||
native file objects returned from os.fdopen() have the string
|
||
"<fdopen>" as their name , but here gevent always follows
|
||
Python 3.) The name remains accessible after the file object
|
||
is closed.
|
||
* Misc:
|
||
- Make gevent.event.AsyncResult print a warning when it detects
|
||
improper cross-thread usage instead of hanging.
|
||
- AsyncResult has never been safe to use from multiple threads.
|
||
It, like most gevent objects, is intended to work with greenlets
|
||
from a single thread. Using AsyncResult from multiple threads
|
||
has undefined semantics. The safest way to communicate between
|
||
threads is using an event loop async watcher.
|
||
- Those undefined semantics changed in recent gevent versions,
|
||
making it more likely that an abused AsyncResult would
|
||
misbehave in ways that could cause the program to hang.
|
||
- Now, when AsyncResult detects a situation that would hang, it
|
||
prints a warning to stderr. Note that this is best-effort, and
|
||
hangs are still possible, especially under PyPy 7.3.3.
|
||
- At the same time, AsyncResult is tuned to behave more like it
|
||
did in older versions, meaning that the hang is once again much
|
||
less likely. If you were getting lucky and using AsyncResult
|
||
successfully across threads, this may restore your luck. In
|
||
addition, cross-thread wakeups are faster. Note that the gevent
|
||
hub now uses an extra file descriptor to implement this.
|
||
- Similar changes apply to gevent.event.Event
|
||
- Update to 20.12.1:
|
||
* Features:
|
||
- Make :class:`gevent.Greenlet` objects function as context
|
||
managers. When the with suite finishes, execution doesn't
|
||
continue until the greenlet is finished. This can be a simpler
|
||
alternative to a :class:`gevent.pool.Group` when the lifetime
|
||
of greenlets can be lexically scoped.
|
||
* Bugfixes:
|
||
- Make gevent's Semaphore objects properly handle native thread
|
||
identifiers larger than can be stored in a C long on Python 3,
|
||
instead of raising an OverflowError.
|
||
- Rebase fix-no-return-in-nonvoid-function.patch
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Feb 9 21:32:04 UTC 2021 - Dirk Müller <dmueller@suse.com>
|
||
|
||
- update to 20.12.0:
|
||
* Make worker threads created by :class:`gevent.threadpool.ThreadPool` install
|
||
the :func:`threading.setprofile` and :func:`threading.settrace` hooks
|
||
while tasks are running. This provides visibility to profiling and
|
||
tracing tools like yappi.
|
||
* Incorrectly passing an exception *instance* instead of an exception
|
||
*type* to `gevent.Greenlet.kill` or `gevent.killall` no longer prints
|
||
an exception to stderr.
|
||
* Make destroying a hub try harder to more forcibly stop loop processing
|
||
when there are outstanding callbacks or IO operations scheduled.
|
||
* Improve the ability to use monkey-patched locks, and
|
||
`gevent.lock.BoundedSemaphore`, across threads, especially when the
|
||
various threads might not have a gevent hub or any other active
|
||
greenlets. In particular, this handles some cases that previously
|
||
raised ``LoopExit`` or would hang. Note that this may not be reliable
|
||
on PyPy on Windows; such an environment is not currently recommended.
|
||
* Make error reporting when a greenlet suffers a `RecursionError` more
|
||
reliable.
|
||
* gevent.pywsgi: Avoid printing an extra traceback ("TypeError: not
|
||
enough arguments for format string") to standard error on certain
|
||
invalid client requests.
|
||
* Add support for PyPy2 7.3.3.
|
||
* Python 2: Make ``gevent.subprocess.Popen.stdin`` objects have a
|
||
``write`` method that guarantees to write the entire argument in
|
||
binary, unbuffered mode. This may require multiple trips around the
|
||
event loop, but more closely matches the behaviour of the Python 2
|
||
standard library (and gevent prior to 1.5). The number of bytes
|
||
written is still returned (instead of ``None``).
|
||
See :issue:`1711`.
|
||
* Make `gevent.pywsgi` stop trying to enforce the rules for reading chunked input or
|
||
``Content-Length`` terminated input when the connection is being
|
||
upgraded, for example to a websocket connection. Likewise, if the
|
||
protocol was switched by returning a ``101`` status, stop trying to
|
||
automatically chunk the responses.
|
||
* Remove the ``__dict__`` attribute from `gevent.socket.socket` objects. The
|
||
standard library socket do not have a ``__dict__``.
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Dec 11 23:52:16 UTC 2020 - Matej Cepl <mcepl@suse.com>
|
||
|
||
- mock dependency was actually not needed at all
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Oct 8 10:03:45 UTC 2020 - Hans-Peter Jansen <hpj@urpla.net>
|
||
|
||
- Disable more tests failing for Python 3.6
|
||
- Don't bother with python2 tests
|
||
|
||
-------------------------------------------------------------------
|
||
Sat Oct 3 16:09:59 UTC 2020 - Hans-Peter Jansen <hpj@urpla.net>
|
||
|
||
- Update to version 20.9.0 (2020-09-22)
|
||
+ Features
|
||
* The embedded libev is now asked to detect the availability of
|
||
clock_gettime and use the realtime and/or monotonic clocks,
|
||
if they are available.
|
||
* On Linux, this can reduce the number of system calls libev
|
||
makes. Originally provided by Josh Snyder. See
|
||
:issue:`issue1648`.
|
||
+ Bugfixes
|
||
* On CPython, depend on greenlet >= 0.4.17. This version is
|
||
binary incompatible with earlier releases on CPython 3.7 and
|
||
later.
|
||
* On Python 3.7 and above, the module gevent.contextvars is no
|
||
longer monkey-patched into the standard library. contextvars
|
||
are now both greenlet and asyncio task local. See
|
||
:issue:`1656`. See :issue:`issue1674`.
|
||
* The DummyThread objects created automatically by certain
|
||
operations when the standard library threading module is
|
||
monkey-patched now match the naming convention the standard
|
||
library uses ("Dummy-12345"). Previously (since gevent 1.2a2)
|
||
they used "DummyThread-12345". See :issue:`1659`.
|
||
* Fix compatibility with dnspython 2.
|
||
* Caution!
|
||
* This currently means that it can be imported. But it cannot
|
||
yet be used. gevent has a pinned dependency on dnspython < 2
|
||
for now.
|
||
* See :issue:`1661`.
|
||
|
||
- Update to version 20.6.2 (2020-06-16)
|
||
+ Features
|
||
* It is now possible to build and use the embedded libuv on a
|
||
Cygwin platform.
|
||
* Note that Cygwin is not an officially supported platform of
|
||
upstream libuv and is not tested by gevent, so the actual
|
||
working status is unknown, and this may bitrot in future
|
||
releases.
|
||
* Thanks to berkakinci for the patch. See :issue:`issue1645`.
|
||
+ Bugfixes
|
||
* Relax the version constraint for psutil on PyPy.
|
||
* Previously it was pinned to 5.6.3 for PyPy2, except for on
|
||
Windows, where it was excluded. It is now treated the same as
|
||
CPython again. See :issue:`issue1643`.
|
||
|
||
- Update to version 20.6.1 (2020-06-10)
|
||
+ Features
|
||
* gevent's CI is now tested on Ubuntu 18.04 (Bionic), an
|
||
upgrade from 16.04 (Xenial). See :issue:`1623`.
|
||
+ Bugfixes
|
||
* On Python 2, the dnspython resolver can be used without
|
||
having selectors2 installed. Previously, an ImportError would
|
||
be raised. See :issue:`issue1641`.
|
||
* Python 3 gevent.ssl.SSLSocket objects no longer attempt to
|
||
catch ConnectionResetError and treat it the same as an
|
||
SSLError with SSL_ERROR_EOF (typically by suppressing it).
|
||
* This was a difference from the way the standard library
|
||
behaved (which is to raise the exception). It was added to
|
||
gevent during early testing of OpenSSL 1.1 and TLS 1.3. See
|
||
:issue:`1637`.
|
||
|
||
- Update to version 20.6.0 (2020-06-06)
|
||
+ Features
|
||
* Add gevent.selectors containing GeventSelector. This selector
|
||
implementation uses gevent details to attempt to reduce
|
||
overhead when polling many file descriptors, only some of
|
||
which become ready at any given time.
|
||
* This is monkey-patched as selectors.DefaultSelector by
|
||
default.
|
||
* This is available on Python 2 if the selectors2 backport is
|
||
installed. (This backport is installed automatically using
|
||
the recommended extra.) When monkey-patching, selectors is
|
||
made available as an alias to this module. See :issue:`1532`.
|
||
* Depend on greenlet >= 0.4.16. This is required for CPython
|
||
3.9 and 3.10a0. See :issue:`1627`.
|
||
* Add support for Python 3.9.
|
||
* No binary wheels are available yet, however. See
|
||
:issue:`1628`.
|
||
+ Bugfixes
|
||
* gevent.socket.create_connection and
|
||
gevent.socket.socket.connect no longer ignore IPv6 scope IDs.
|
||
* Any IP address (IPv4 or IPv6) is no longer subject to an
|
||
extra call to getaddrinfo. Depending on the resolver in use,
|
||
this is likely to change the number and order of greenlet
|
||
switches. (On Windows, in particular test cases when there
|
||
are no other greenlets running, it has been observed to lead
|
||
to LoopExit in scenarios that didn't produce that before.)
|
||
See :issue:`1634`.
|
||
|
||
- Update to version 20.5.2 (2020-05-28)
|
||
+ Bugfixes
|
||
* Forking a process that had use the threadpool to run tasks
|
||
that created their own hub would fail to clean up the
|
||
threadpool by raising greenlet.error. See :issue:`1631`.
|
||
|
||
- Update to version 20.5.1 (2020-05-26)
|
||
+ Features
|
||
* Waiters on Event and Semaphore objects that call wait() or
|
||
acquire(), respectively, that find the Event already set, or
|
||
the Semaphore available, no longer "cut in line" and run
|
||
before any previously scheduled greenlets. They now run in
|
||
the order in which they arrived, just as waiters that had to
|
||
block in those methods do. See :issue:`1520`.
|
||
* Update tested PyPy version from 7.3.0 to 7.3.1 on Linux. See
|
||
:issue:`1569`.
|
||
* Make zope.interface, zope.event and (by extension) setuptools
|
||
required dependencies. The events install extra now does
|
||
nothing and will be removed in 2021. See :issue:`1619`.
|
||
* Update bundled libuv from 1.36.0 to 1.38.0. See
|
||
:issue:`1621`.
|
||
* Update bundled c-ares from 1.16.0 to 1.16.1.
|
||
* On macOS, stop trying to adjust c-ares headers to make them
|
||
universal. See :issue:`1624`.
|
||
+ Bugfixes
|
||
* Make gevent locks that are monkey-patched usually work across
|
||
native threads as well as across greenlets within a single
|
||
thread. Locks that are only used in a single thread do not
|
||
take a performance hit. While cross-thread locking is
|
||
relatively expensive, and not a recommended programming
|
||
pattern, it can happen unwittingly, for example when using
|
||
the threadpool and logging.
|
||
* Before, cross-thread lock uses might succeed, or, if the lock
|
||
was contended, raise greenlet.error. Now, in the contended
|
||
case, if the lock has been acquired by the main thread at
|
||
least once, it should correctly block in any thread,
|
||
cooperating with the event loop of both threads. In certain
|
||
(hopefully rare) cases, it might be possible for contended
|
||
case to raise LoopExit when previously it would have raised
|
||
greenlet.error; if these cases are a practical concern,
|
||
please open an issue.
|
||
* Also, the underlying Semaphore always behaves in an atomic
|
||
fashion (as if the GIL was not released) when PURE_PYTHON is
|
||
set. Previously, it only correctly did so on PyPy. See
|
||
:issue:`issue1437`.
|
||
* Rename gevent's C accelerator extension modules using a
|
||
prefix to avoid clashing with other C extensions. See
|
||
:issue:`1480`.
|
||
* Using gevent.wait on an Event more than once, when that Event
|
||
is already set, could previously raise an AssertionError.
|
||
* As part of this, exceptions raised in the main greenlet will
|
||
now include a more complete traceback from the failing
|
||
greenlet. See :issue:`1540`.
|
||
* Avoid closing the same Python libuv watcher IO object twice.
|
||
Under some circumstances (only seen on Windows), that could
|
||
lead to program crashes. See :issue:`1587`.
|
||
* gevent can now be built using Cython 3.0a5 and newer. The
|
||
PyPI distribution uses this version.
|
||
* The libev extension was incompatible with this. As part of
|
||
this, certain internal, undocumented names have been changed.
|
||
* (Technically, gevent can be built with Cython 3.0a2 and
|
||
above. However, up through 3.0a4 compiling with Cython 3
|
||
results in gevent's test for memory leaks failing. See this
|
||
Cython issue.) See :issue:`1599`.
|
||
* Destroying a hub after joining it didn't necessarily clean up
|
||
all resources associated with the hub, especially if the hub
|
||
had been created in a secondary thread that was exiting. The
|
||
hub and its parent greenlet could be kept alive.
|
||
* Now, destroying a hub drops the reference to the hub and
|
||
ensures it cannot be switched to again. (Though using a new
|
||
blocking API call may still create a new hub.)
|
||
* Joining a hub also cleans up some (small) memory resources
|
||
that might have stuck around for longer before as well. See
|
||
:issue:`1601`.
|
||
* Fix some potential crashes under libuv when using
|
||
gevent.signal_handler. The crashes were seen running the test
|
||
suite and were non-deterministic. See :issue:`1606`.
|
||
|
||
- Update to version 20.5.0 (2020-05-01)
|
||
+ Features
|
||
* Update bundled c-ares to version 1.16.0. Changes. See
|
||
:issue:`1588`.
|
||
* Update all the bundled config.guess and config.sub scripts.
|
||
See :issue:`1589`.
|
||
* Update bundled libuv from 1.34.0 to 1.36.0. See
|
||
:issue:`1597`.
|
||
+ Bugfixes
|
||
* Use ares_getaddrinfo instead of a manual lookup.
|
||
* This requires c-ares 1.16.0.
|
||
* Note that this may change the results, in particular their
|
||
order.
|
||
* As part of this, certain parts of the c-ares extension were
|
||
adapted to use modern Cython idioms.
|
||
* A few minor errors and discrepancies were fixed as well, such
|
||
as gethostbyaddr('localhost') working on Python 3 and failing
|
||
on Python 2. The DNSpython resolver now raises the expected
|
||
TypeError in more cases instead of an AttributeError. See
|
||
:issue:`1012`.
|
||
* The c-ares and DNSPython resolvers now raise exceptions much
|
||
more consistently with the standard resolver. Types and
|
||
errnos are substantially more likely to match what the
|
||
standard library produces.
|
||
* Depending on the system and configuration, results may not
|
||
match exactly, at least with DNSPython. There are still some
|
||
rare cases where the system resolver can raise herror but
|
||
DNSPython will raise gaierror or vice versa. There doesn't
|
||
seem to be a deterministic way to account for this. On PyPy,
|
||
getnameinfo can produce results when CPython raises
|
||
socket.error, and gevent's DNSPython resolver also raises
|
||
socket.error.
|
||
* In addition, several other small discrepancies were
|
||
addressed, including handling of localhost and broadcast host
|
||
names.
|
||
* Note
|
||
* This has been tested on Linux (CentOS and Ubuntu), macOS, and
|
||
Windows. It hasn't been tested on other platforms, so results
|
||
are unknown for them. The c-ares support, in particular, is
|
||
using some additional socket functions and defines. Please
|
||
let the maintainers know if this introduces issues.
|
||
* See :issue:`1459`.
|
||
|
||
- Update to version 20.04.0 (2020-04-22)
|
||
+ Features
|
||
* Let CI (Travis and Appveyor) build and upload release wheels
|
||
for Windows, macOS and manylinux. As part of this, (a subset
|
||
of) gevent's tests can run if the standard library's
|
||
test.support module has been stripped. See :issue:`1555`.
|
||
* Update tested PyPy version from 7.2.0 on Windows to 7.3.1.
|
||
See :issue:`1569`.
|
||
+ Bugfixes
|
||
* Fix a spurious warning about watchers and resource leaks on
|
||
libuv on Windows. Reported by Stéphane Rainville. See
|
||
:issue:`1564`.
|
||
* Make monkey-patching properly remove select.epoll and
|
||
select.kqueue. Reported by Kirill Smelkov. See :issue:`1570`.
|
||
* Make it possible to monkey-patch :mod:`contextvars` before
|
||
Python 3.7 if a non-standard backport that uses the same name
|
||
as the standard library does is installed. Previously this
|
||
would raise an error. Reported by Simon Davy. See
|
||
:issue:`1572`.
|
||
* Fix destroying the libuv default loop and then using the
|
||
default loop again. See :issue:`1580`.
|
||
* libuv loops that have watched children can now exit.
|
||
Previously, the SIGCHLD watcher kept the loop alive even if
|
||
there were no longer any watched children. See :issue:`1581`.
|
||
+ Deprecations and Removals
|
||
* PyPy no longer uses the Python allocation functions for libuv
|
||
and libev allocations. See :issue:`1569`.
|
||
|
||
- Use the system libev by default
|
||
- Remove fix-tests.patch
|
||
- Remove use-libev-cffi.patch
|
||
- Greatly reduce the list of non functional tests
|
||
- Add fix-no-return-in-nonvoid-function.patch, applied for 15.1 and
|
||
below in order to not fail the build
|
||
- Add missing runtime dependencies:
|
||
python-zope.event and python-zope.interface
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Jan 3 11:51:00 CET 2020 - Matej Cepl <mcepl@suse.com>
|
||
|
||
- Use bundled libev library to overcome the current
|
||
incompatibility with libev > 4.25. gh#gevent/gevent#1501
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Jan 2 14:09:44 CET 2020 - Matej Cepl <mcepl@suse.com>
|
||
|
||
- Upgrade to 1.5a3:
|
||
- The file objects (FileObjectPosix, FileObjectThread) now
|
||
consistently text and binary modes. If neither 'b' nor 't' is
|
||
given in the mode, they will read and write native strings.
|
||
If 't' is given, they will always work with unicode strings,
|
||
and 'b' will always work with byte strings. (FileObjectPosix
|
||
already worked this way.) See :issue:`1441`.
|
||
- The file objects accept encoding, errors and newline
|
||
arguments. On Python 2, these are only used if 't' is in the
|
||
mode.
|
||
- The default mode for FileObjectPosix changed from rb to
|
||
simply r, for consistency with the other file objects and the
|
||
standard open and io.open functions.
|
||
- Fix FileObjectPosix improperly being used from multiple
|
||
greenlets. Previously this was hidden by forcing buffering,
|
||
which raised RuntimeError.
|
||
- Fix using monkey-patched threading.Lock and threading.RLock
|
||
objects as spin locks by making them call sleep(0) if they
|
||
failed to acquire the lock in a non-blocking call. This lets
|
||
other callbacks run to release the lock, simulating
|
||
preemptive threading. Using spin locks is not recommended,
|
||
but may have been done in code written for threads,
|
||
especially on Python 3. See :issue:`1464`.
|
||
- Fix Semaphore (and monkey-patched threading locks) to be
|
||
fair. This eliminates the rare potential for starvation of
|
||
greenlets. As part of this change, the low-level method
|
||
rawlink of Semaphore, Event, and AsyncResult now always
|
||
remove the link object when calling it, so unlink can
|
||
sometimes be optimized out. See :issue:`1487`.
|
||
- Make gevent.pywsgi support Connection: keep-alive in
|
||
HTTP/1.0. Based on :pr:`1331` by tanchuhan.
|
||
- Fix a potential crash using gevent.idle() when using libuv.
|
||
See :issue:`1489`.
|
||
- Fix some potential crashes using libuv async watchers.
|
||
- Make ThreadPool consistently raise InvalidThreadUseError when
|
||
spawn is called from a thread different than the thread that
|
||
created the threadpool. This has never been allowed, but was
|
||
inconsistently enforced. On gevent 1.3 and before, this would
|
||
always raise "greenlet error: invalid thread switch," or
|
||
LoopExit. On gevent 1.4, it could raise LoopExit, depending
|
||
on the number of tasks, but still, calling it from
|
||
a different thread was likely to corrupt libev or libuv
|
||
internals.
|
||
- Remove some undocumented, deprecated functions from the
|
||
threadpool module.
|
||
- libuv: Fix a perceived slowness spawning many greenlets at
|
||
the same time without yielding to the event loop while having
|
||
no active IO watchers or timers. If the time spent launching
|
||
greenlets exceeded the switch interval and there were no
|
||
other active watchers, then the default IO poll time of about
|
||
.3s would elapse between spawning batches. This could
|
||
theoretically apply for any non-switching callbacks. This can
|
||
be produced in synthetic benchmarks and other special
|
||
circumstances, but real applications are unlikely to be
|
||
affected. See :issue:`1493`.
|
||
- Fix using the threadpool inside a script or module run with
|
||
python -m gevent.monkey. Previously it would use greenlets
|
||
instead of native threads. See :issue:`1484`.
|
||
- Fix potential crashes in the FFI backends if a watcher was
|
||
closed and stopped in the middle of a callback from the event
|
||
loop and then raised an exception. This could happen if the
|
||
hub's handle_error function was poorly customized, for
|
||
example. See :issue:`1482`
|
||
- Make gevent.killall stop greenlets from running that hadn't
|
||
been run yet. This make it consistent with Greenlet.kill().
|
||
See :issue:`1473` reported by kochelmonster.
|
||
- Make gevent.spawn_raw set the loop attribute on returned
|
||
greenlets. This lets them work with more gevent APIs, notably
|
||
gevent.killall(). They already had dictionaries, but this may
|
||
make them slightly larger, depending on platform (on CPython
|
||
2.7 through 3.6 there is no apparent difference for one
|
||
attribute but on CPython 3.7 and 3.8 dictionaries are
|
||
initially empty and only allocate space once an attribute is
|
||
added; they're still smaller than on earlier versions
|
||
though).
|
||
- Add support for CPython 3.8.0. (Windows wheels are not yet
|
||
available.)
|
||
- Add an --module option to gevent.monkey allowing to run
|
||
a Python module rather than a script. See :pr:`1440`.
|
||
- Improve the way joining the main thread works on Python 3.
|
||
- Implement SSLSocket.verify_client_post_handshake() when
|
||
available.
|
||
- Fix tests when TLS1.3 is supported.
|
||
- Disable Nagle's algorithm in the backdoor server. This can
|
||
improve interactive response time.
|
||
- Test on Python 3.7.4. There are important SSL test fixes.
|
||
- Python version updates: gevent is now tested with CPython
|
||
2.7.16, 3.5.6, 3.6.8, and 3.7.2. It is also tested with PyPy2
|
||
7.1 and PyPy 3.6 7.1 (PyPy 7.0 and 7.1 were not capable of
|
||
running SSL tests on Travis CI).
|
||
- Support for Python 3.4 has been removed, as that version is
|
||
no longer supported uptstream.
|
||
- gevent binary wheels are now manylinux2010 and include libuv
|
||
support. pip 19 is needed to install them. See :issue:`1346`.
|
||
- gevent is now compiled with Cython 0.29.6 and cffi 1.12.2.
|
||
- gevent sources include a pyproject.toml file, specifying the
|
||
build requirements and enabling build isolation. pip 18 or
|
||
above is needed to take advantage of this. See :issue:`1180`.
|
||
- libev-cffi: Let the compiler fill in the definition of
|
||
nlink_t for st_nlink in struct stat, instead of trying to
|
||
guess it ourself. Reported in :issue:`1372` by Andreas
|
||
Schwab.
|
||
- Remove the Makefile. Its most useful commands, make clean and
|
||
make distclean, can now be accomplished in a cross-platform
|
||
way using python setup.py clean and python setup.py clean -a,
|
||
respectively. The remainder of the Makefile contained Travis
|
||
CI commands that have been moved to .travis.yml.
|
||
- Deprecate the EMBED and LIBEV_EMBED, etc, build-time
|
||
environment variables. Instead, use GEVENTSETUP_EMBED and
|
||
GEVENTSETUP_EMBED_LIBEV. See :issue:`1402`.
|
||
- The CFFI backends now respect the embed build-time setting.
|
||
This allows building the libuv backend without embedding
|
||
libuv (except on Windows).
|
||
- Support test resources. This allows disabling tests that use
|
||
the network. See :ref:`limiting-test-resource-usage` for
|
||
more.
|
||
- Python 3.7 subprocess: Copy a STARTUPINFO passed as
|
||
a parameter. Contributed by AndCycle in :pr:`1352`.
|
||
- subprocess: WIFSTOPPED and SIGCHLD are now handled for
|
||
determining Popen.returncode. See
|
||
https://bugs.python.org/issue29335
|
||
- subprocess: No longer close redirected FDs if they are in
|
||
pass_fds. This is a bugfix from Python 3.7 applied to all
|
||
versions gevent runs on.
|
||
- Fix certain operations on a Greenlet in an invalid state
|
||
(with an invalid parent) to raise a TypeError sooner rather
|
||
than an AttributeError later. This is also slightly faster on
|
||
CPython with Cython. Inspired by :issue:`1363` as reported by
|
||
Carson Ip. This means that some extreme corner cases that
|
||
might have passed by replacing a Greenlet's parent with
|
||
something that's not a gevent hub now no longer will.
|
||
- Fix: The spawning_stack for Greenlets on CPython should now
|
||
have correct line numbers in more cases. See :pr:`1379`.
|
||
- The result of gevent.ssl.SSLSocket.makefile() can be used as
|
||
a context manager on Python 2.
|
||
- Python 2: If the backport of the _thread_ module from futures
|
||
has already been imported at monkey-patch time, also patch
|
||
this module to be consistent. The pkg_resources package
|
||
imports this, and pkg_resources is often imported early on
|
||
Python 2 for namespace packages, so if futures is installed
|
||
this will likely be the case.
|
||
- Python 2: Avoid a memory leak when an io.BufferedWriter is
|
||
wrapped around a socket. Reported by Damien Tournoud in
|
||
:issue:`1318`.
|
||
- Avoid unbounded memory usage when creating very deep spawn
|
||
trees. Reported in :issue:`1371` by dmrlawson.
|
||
- Win: Make examples/process.py do something useful. See
|
||
:pr:`1378` by Robert Iannucci.
|
||
- Spawning greenlets can be up to 10% faster. See :pr:`1379`.
|
||
- Removed remove-testCongestion.patch which was subsumed in the
|
||
upstream tarball.
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Apr 11 14:20:20 UTC 2019 - Matej Cepl <mcepl@suse.com>
|
||
|
||
- Switch off type_https test as it fails with new Python 2.7.16
|
||
- Clean up the SPEC file.
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Feb 18 12:09:52 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||
|
||
- Skip the SSL tests as they just only triggers false positives
|
||
with hope upstream sorts it out someday
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Feb 11 11:02:21 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||
|
||
- Switch to pkgconfig requirements as c-ares was renamed between
|
||
SLE12 and SLE15
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Feb 4 11:37:48 UTC 2019 - Antonio Larrosa <alarrosa@suse.com>
|
||
|
||
- Add patches to fix building the package:
|
||
* remove-testCongestion.patch to remove a test that is failing
|
||
due to a timeout
|
||
* fix-tests.patch to fix some tests
|
||
- ssl.OP_NO_COMPRESSION is set by default by ssl.
|
||
- thread_ident can be represented as a negative hex number now,
|
||
so replace the negative sign with the regex too, and not just the number.
|
||
* use-libev-cffi.patch, libev-cext seems to be broken on i586, so
|
||
use libev-cffi by default (also, the gevent documentation mentions
|
||
that upstream will make libev-cffi the default soon).
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Feb 1 10:35:13 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||
|
||
- Make sure to skip tests that need network access
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Jan 31 09:42:44 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||
|
||
- Version update to 1.4.0:
|
||
* generate with cython 0.29
|
||
* Refactored the gevent test runner and test suite to make them more reusable. In particular, the tests are now run with python -m gevent.tests. See issue #1293.
|
||
* Formatting run info no longer includes gevent.local.local objects that have no value in the greenlet. See issue #1275.
|
||
* Fixed negative length in pywsgi’s Input read functions for non chunked body. Reported in issue #1274 by tzickel.
|
||
* Fix opening files in text mode in CPython 2 on Windows by patching libuv. See issue #1282 reported by wiggin15.
|
||
* gevent now depends on greenlet 0.4.14 or above.
|
||
* gevent.local.local subclasses correctly supports @staticmethod functions. Reported by Brendan Powers in issue #1266.
|
||
- Do NOT bundle c-ares and libev
|
||
|
||
-------------------------------------------------------------------
|
||
Wed Jan 9 08:26:33 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com>
|
||
|
||
- Switch the condition logic to match the previous changelog
|
||
|
||
-------------------------------------------------------------------
|
||
Wed Jan 9 00:10:41 UTC 2019 - Jonathan Brownell <jbrownell@suse.com>
|
||
|
||
- Use "Requires:" instead of "Recommends:" on older Red Hat platforms
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Aug 7 15:22:15 UTC 2018 - toddrme2178@gmail.com
|
||
|
||
- Update to 1.3.5
|
||
* Update the bundled libuv from 1.20.1 to 1.22.0.
|
||
* Test Python 3.7 on Appveyor. Fix the handling of Popen's
|
||
``close_fds`` argument on 3.7.
|
||
* Update Python versions tested on Travis, including PyPy to 6.0. See :issue:`1195`.
|
||
* :mod:`gevent.queue` imports ``_PySimpleQueue`` instead of
|
||
``SimpleQueue`` so that it doesn't block the event loop.
|
||
:func:`gevent.monkey.patch_all` makes this same substitution in
|
||
:mod:`queue`. This fixes issues with
|
||
:class:`concurrent.futures.ThreadPoolExecutor` as well. Reported in
|
||
:issue:`1248` by wwqgtxx and :issue:`1251` by pyld.
|
||
* :meth:`gevent.socket.socket.connect` doesn't pass the port (service)
|
||
to :func:`socket.getaddrinfo` when it resolves an ``AF_INET`` or
|
||
``AF_INET6`` address. (The standard library doesn't either.) This
|
||
fixes an issue on Solaris. Reported in :issue:`1252` by wiggin15.
|
||
* :meth:`gevent.socket.socket.connect` works with more address
|
||
families, notably AF_TIPC, AF_NETLINK, AF_BLUETOOTH, AF_ALG and AF_VSOCK.
|
||
- Update to 1.3.4
|
||
* Be more careful about issuing ``MonkeyPatchWarning`` for ssl
|
||
imports. Now, we only issue it if we detect the one specific
|
||
condition that is known to lead to RecursionError. This may produce
|
||
false negatives, but should reduce or eliminate false positives.
|
||
* Based on measurements and discussion in :issue:`1233`, adjust the
|
||
way :mod:`gevent.pywsgi` generates HTTP chunks. This is intended to
|
||
reduce network overhead, especially for smaller chunk sizes.
|
||
* Additional slight performance improvements in :mod:`gevent.pywsgi`.
|
||
See :pr:`1241`.
|
||
|
||
-------------------------------------------------------------------
|
||
Wed Jun 13 17:58:41 UTC 2018 - toddrme2178@gmail.com
|
||
|
||
- Update to 1.3.3
|
||
* :func:`gevent.sleep` updates the loop's notion of the current time
|
||
before sleeping so that sleep duration corresponds more closely to
|
||
elapsed (wall clock) time. :class:`gevent.Timeout` does the same.
|
||
Reported by champax and FoP in :issue:`1227`.
|
||
* Fix an ``UnboundLocalError`` in SSL servers when wrapping a socket
|
||
throws an error. Reported in :issue:`1236` by kochelmonster.
|
||
- Update to 1.3.2
|
||
* Allow weak refeneces to :class:`gevent.queue.Queue`. Reported in
|
||
:issue:`1217` by githrdw.
|
||
- Update to 1.3.1
|
||
* Allow weak references to :class:`gevent.event.Event`. Reported in
|
||
:issue:`1211` by Matias Guijarro.
|
||
* Fix embedded uses of :func:`gevent.Greenlet.spawn`, especially under
|
||
uwsgi. Reported in :issue:`1212` by Kunal Gangakhedkar.
|
||
* Fix :func:`gevent.os.nb_write` and :func:`gevent.os.nb_read` not
|
||
always closing the IO event they opened in the event of an
|
||
exception. This would be a problem especially for libuv.
|
||
- Update to 1.3.0
|
||
+ Dependencies
|
||
* Cython 0.28.2 is now used to build gevent from a source checkout.
|
||
* The bundled libuv is now 1.19.2, up from 1.18.0.
|
||
* On Windows, CFFI is now a dependency so that the libuv backend
|
||
really can be used by default.
|
||
* Cython 0.28b1 or later is now required to build gevent from a source
|
||
checkout (Cython is *not* required to build a source distribution
|
||
from PyPI).
|
||
* Update c-ares to 1.14.0. See :issue:`1105`.
|
||
* The bundled libuv is now 1.20.1, up from 1.19.2. See :issue:`1177`.
|
||
* gevent now **requires** the patched version of libuv it is
|
||
distributed with. Building gevent with a non-embedded libuv, while
|
||
not previously supported, is not possible now. See
|
||
:issue:`1126`.
|
||
* gevent is now built and tested with Cython 0.27. This is required
|
||
for Python 3.7 support.
|
||
* Update c-ares to 1.13.0. See :issue:`990`.
|
||
+ Platform Support
|
||
* Travis CI tests on Python 3.7.0b3.
|
||
* Windows now defaults to the libuv backend if CFFI is installed. See
|
||
:issue:`1163`.
|
||
* Python 3.7 passes the automated memory leak checks. See :issue:`1197`.
|
||
* Python 3.7.0b4 is now the tested and supported version of Python
|
||
3.7. PyPy 6.0 has been tested, although CI continues to use 5.10.
|
||
* Travis CI tests on Python 3.7.0b2 and PyPy 2.7 5.10.0 and PyPy 3.5
|
||
5.10.1.
|
||
* Add initial support for Python 3.7a3. It has the same level of
|
||
support as Python 3.6.
|
||
> Using unreleased Cython 0.28 and greenlet 0.4.13; requires Python 3.7a3.
|
||
> The ``async`` functions and classes have been renamed to
|
||
``async_`` due to ``async`` becoming a keyword in Python 3.7.
|
||
Aliases are still in place for older versions. See :issue:`1047`.
|
||
* gevent is now tested on Python 3.6.4. This includes the following
|
||
fixes and changes:
|
||
> Errors raised from :mod:`gevent.subprocess` will have a
|
||
``filename`` attribute set.
|
||
> The :class:`threading.Timer` class is now monkey-patched and can
|
||
be joined. Previously on Python 3.4 and above, joining a ``Timer``
|
||
would hang the process.
|
||
> :meth:`gevent.ssl.SSLSocket.unwrap` behaves more like the standard
|
||
library, including returning a SSLSocket and allowing certain
|
||
timeout-related SSL errors to propagate. The added standard
|
||
library tests ``test_ftplib.py`` now passes.
|
||
> :class:`gevent.subprocess.Popen` accepts a "path-like object" for
|
||
the *cwd* parameter on all platforms. Previously this only worked
|
||
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.
|
||
* 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.9.0 from 5.7.1,
|
||
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
|
||
Python 3.6 is now 3.6.4 from 3.6.0.
|
||
* 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
|
||
been tested. This merely removes the supporting Trove classifier and
|
||
remaining test code. See :issue:`997`.
|
||
* PyPy is now known to run on Windows using the libuv backend, with
|
||
caveats. See the section on libuv for more information.
|
||
* Due to security concerns, official support for Python 2.7.8 and
|
||
earlier (without a modern SSL implementation) has been dropped.
|
||
These versions are no longer tested with gevent, but gevent can
|
||
still be installed on them. Supporting code will be removed in the
|
||
next major version of gevent. See :issue:`1073`.
|
||
* `gevent.subprocess.Popen` uses ``/proc/self/fd`` (on Linux) or
|
||
``/dev/fd`` (on BSD, including macOS) to find the file descriptors
|
||
to close when ``close_fds`` is true. This matches an optimization
|
||
added to Python 3 (and backports it to Python 2.7), making process
|
||
spawning up to 9 times faster. Also, on Python 3, since Python 3.3
|
||
is no longer supported, we can also optimize the case where
|
||
``close_fds`` is false (not the default), making process spawning up
|
||
to 38 times faster. Initially reported in :issue:`1172` by Ofer Koren.
|
||
+ Bug Fixes
|
||
* :class:`gevent.local.local` subclasses that mix-in ABCs can be instantiated.
|
||
Reported in :issue:`1201` by Bob Jordan.
|
||
* Fix a bug detecting whether we can use the memory monitoring
|
||
features when psutil is not installed.
|
||
* On Python 2, when monkey-patching `threading.Event`, also
|
||
monkey-patch the underlying class, ``threading._Event``. Some code
|
||
may be type-checking for that. See :issue:`1136`.
|
||
* Fix libuv io watchers polling for events that only stopped watchers
|
||
are interested in, reducing CPU usage. Reported in :issue:`1144` by
|
||
wwqgtxx.
|
||
* Fix calling ``shutdown`` on a closed socket. It was raising
|
||
``AttributeError``, now it once again raises the correct
|
||
``socket.error``. Reported in :issue:`1089` by André Cimander.
|
||
* Fix an interpreter crash that could happen if two or more ``loop``
|
||
objects referenced the default event loop and one of them was
|
||
destroyed and then the other one destroyed or (in the libev C
|
||
extension implementation only) deallocated (garbage collected). See
|
||
:issue:`1098`.
|
||
* Fix a race condition in libuv child callbacks. See :issue:`1104`.
|
||
* If a single greenlet created and destroyed many
|
||
:class:`gevent.local.local` objects without ever exiting, there
|
||
would be a leak of the function objects intended to clean up the
|
||
locals after the greenlet exited. Introduce a weak reference to
|
||
avoid that. Reported in :issue:`981` by Heungsub Lee.
|
||
* pywsgi also catches and ignores by default
|
||
:const:`errno.WSAECONNABORTED` on Windows. Initial patch in
|
||
:pr:`999` by Jan van Valburg.
|
||
* :meth:`gevent.subprocess.Popen.communicate` returns the correct type
|
||
of str (not bytes) in universal newline mode under Python 3, or when
|
||
an encoding has been specified. Initial patch in :pr:`939` by
|
||
William Grzybowski.
|
||
* :meth:`gevent.subprocess.Popen.communicate` (and in general,
|
||
accessing ``Popen.stdout`` and ``Popen.stderr``) returns the correct
|
||
type of str (bytes) in universal newline mode under Python 2.
|
||
Previously it always returned unicode strings. Reported in
|
||
:issue:`1039` by Michal Petrucha.
|
||
* :class:`gevent.fileobject.FileObjectPosix` returns native strings in
|
||
universal newline mode on Python 2. This is consistent with what
|
||
: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.
|
||
+ Enhancements
|
||
* Add additional optimizations for spawning greenlets, making it
|
||
faster than 1.3a2.
|
||
* Use strongly typed watcher callbacks in the libuv CFFI extensions.
|
||
This prevents dozens of compiler warnings.
|
||
* When gevent prints a timestamp as part of an error message, it is
|
||
now in UTC format as specified by RFC3339.
|
||
* Threadpool threads that exit now always destroy their hub (if one
|
||
was created). This prevents some forms of resource leaks (notably
|
||
visible as blocking functions reported by the new monitoring abilities).
|
||
* Hub objects now include the value of their ``name`` attribute in
|
||
their repr.
|
||
* Pools for greenlets and threads have lower overhead, especially for
|
||
``map``. See :pr:`1153`.
|
||
* The undocumented, internal implementation classes ``IMap`` and
|
||
``IMapUnordered`` classes are now compiled with Cython, further
|
||
reducing the overhead of ``[Thread]Pool.imap``.
|
||
* The classes `gevent.event.Event` and `gevent.event.AsyncResult`
|
||
are compiled with Cython for improved performance, as is the
|
||
``gevent.queue`` module and ``gevent.hub.Waiter`` and certain
|
||
time-sensitive parts of the hub itself. Please report any
|
||
compatibility issues.
|
||
* ``python -m gevent.monkey <script>`` accepts more values for
|
||
``<script>``, including paths to packages or compiled bytecode.
|
||
Reported in :issue:`1157` by Eddie Linder.
|
||
* Add a simple event framework for decoupled communication. It uses
|
||
:mod:`zope.event` if that is installed.
|
||
* :mod:`gevent.monkey` has support for plugins in the form of event
|
||
subscribers and setuptools entry points. See :pr:`1158` and
|
||
:issue:`1162`. setuptools must be installed at runtime for its entry
|
||
points to function.
|
||
* Add the ``dnspython`` resolver as a lightweight alternative to
|
||
c-ares. It is generally faster than c-ares and is supported on PyPy.
|
||
c-ares may be deprecated in the future. See :pr:`1088` and
|
||
:issue:`1103`.
|
||
* Add the module :mod:`gevent.time` that can be imported instead of
|
||
:mod:`time`, much like :mod:`gevent.socket` can be imported instead
|
||
of :mod:`socket`. It contains ``gevent.sleep``. This aids
|
||
monkey-patching.
|
||
* Simple subclasses of `gevent.local.local` now have the same
|
||
(substantially improved) performance characteristics of plain
|
||
`gevent.local.local` itself, making them 2 to 3 times faster than
|
||
before. See :pr:`1117`. If there are any compatibility
|
||
problems, please open issues.
|
||
* Add `gevent.util.assert_switches` to build on the monitoring
|
||
functions. Fixes :issue:`1182`.
|
||
* A started monitor thread for the active hub now survives a fork. See
|
||
:issue:`1185`.
|
||
* The greenlet tracer functions used for the various monitoring
|
||
capabilities are now compiled with Cython for substantially lower
|
||
overhead. See :pr:`1190`.
|
||
* libuv now collects all pending watchers and runs their callbacks at
|
||
the end of the loop iteration using UV_RUN_ONCE. This eliminates the
|
||
need to patch libuv to be greenlet-safe. It also means that
|
||
zero-duration timer watchers are actual timer watchers again
|
||
(instead of being turned into check watchers); newly added
|
||
zero-duration timers cannot block the event loop because they won't
|
||
be run until a safe time.
|
||
+ Monitoring and Debugging
|
||
* Introduce the configuration variable
|
||
`gevent.config.track_greenlet_tree` (aka
|
||
``GEVENT_TRACK_GREENLET_TREE``) to allow disabling the greenlet tree
|
||
features for applications where greenlet spawning is performance
|
||
critical. This restores spawning performance to 1.2 levels.
|
||
* Add an optional monitoring thread for each hub. When enabled, this
|
||
thread (by default) looks for greenlets that block the event loop
|
||
for more than 0.1s. You can add your own periodic monitoring
|
||
functions to this thread. Set ``GEVENT_MONITOR_THREAD_ENABLE`` to
|
||
use it, and ``GEVENT_MAX_BLOCKING_TIME`` to configure the blocking
|
||
interval.
|
||
* The monitoring thread emits events when it detects certain
|
||
conditions, like loop blocked or memory limits exceeded.
|
||
* Add settings for monitoring memory usage and emitting events when a
|
||
threshold is exceeded and then corrected. gevent currently supplies
|
||
no policy for what to do when memory exceeds the configured limit.
|
||
``psutil`` must be installed to use this. See :pr:`1150`.
|
||
* Greenlet objects now keep track of their spawning parent greenlet
|
||
and the code location that spawned them, in addition to maintaining
|
||
a "spawn tree local" mapping. This adds some runtime overhead in
|
||
relative terms, but absolute numbers are still relatively small.
|
||
Based on a proposal from PayPal and comments by Mahmoud Hashemi and
|
||
Kurt Rose. See :issue:`755` and :pr:`1115`. As always, feedback is
|
||
appreciated.
|
||
* Greenlet objects now have a `minimal_ident
|
||
<gevent.Greenlet.minimal_ident>` property. It functions
|
||
similarly to ``Thread.ident`` or ``id`` by uniquely identifying the
|
||
greenlet object while it remains alive, and it can be reused after
|
||
the greenlet object is dead. It is different in that it is small and
|
||
sequential. Based on a proposal from PayPal and comments by Mahmoud
|
||
Hashemi and Kurt Rose. See :issue:`755`. As always, feedback is
|
||
appreciated.
|
||
* `gevent.Greenlet` objects now have a `gevent.Greenlet.name`
|
||
attribute that is included in the default repr.
|
||
* Include the values of `gevent.local.local` objects associated with
|
||
each greenlet in `gevent.util.format_run_info`.
|
||
* Add `gevent.util.GreenletTree` to visualize the greenlet tree. This
|
||
is used by `gevent.util.format_run_info`.
|
||
+ Build Changes
|
||
* Fix building from a source distribution (PyPI) without Cython
|
||
installed.
|
||
* When building gevent from a source checkout (*not* a distributed
|
||
source distribution), ``make`` is no longer required and the
|
||
``Makefile`` is not used. Neither is an external ``cython`` command.
|
||
Instead, the ``cythonize`` function is used, as recommended by
|
||
Cython. (The external commands were never required by source
|
||
distributions.) See :issue:`1076`.
|
||
* :class:`gevent.local.local` is compiled with Cython on CPython.
|
||
* The Cython ares 'channel' class is no longer declared to be publicly
|
||
accessible from a named C structure. Doing so caused a conflict with
|
||
the c-ares header files.
|
||
* Update autoconf's config.guess and config.sub to the latest versions
|
||
for c-ares and libev.
|
||
+ Subprocess
|
||
* Make :class:`gevnt.subprocess.Popen` accept the ``restore_signals``
|
||
keyword argument on all versions of Python, and on Python 2 have it
|
||
default to false. It previously defaulted to true on all versions;
|
||
now it only defaults to true on Python 3. The standard library in
|
||
Python 2 does not have this argument and its behaviour with regards
|
||
to signals is undocumented, but there is code known to rely on
|
||
signals not being restored under Python 2. Initial report and patch
|
||
in :pr:`1063` by Florian Margaine.
|
||
* Allow :class:`gevent.subprocess.Popen` to accept the keyword
|
||
arguments ``pass_fds`` and ``start_new_session`` under Python 2.
|
||
They have always had the same default as Python 3, namely an empty
|
||
tuple and false, but now are accessible to Python 2.
|
||
* Support the ``capture_output`` argument added to Python 3.7 in
|
||
:func:`gevent.subprocess.run`.
|
||
+ Configuration
|
||
* Centralize all gevent configuration in an object at
|
||
``gevent.config``, allowing for gevent to be configured through code
|
||
and not *necessarily* environment variables, and also provide a
|
||
centralized place for documentation. See :issue:`1090`.
|
||
> The new ``GEVENT_CORE_CFFI_ONLY`` environment variable has been
|
||
replaced with the pre-existing ``GEVENT_LOOP`` environment
|
||
variable. That variable may take the values ``libev-cext``,
|
||
``libev-cffi``, or ``libuv-cffi``, (or be a list in preference
|
||
order, or be a dotted name; it may also be assigned to an
|
||
object in Python code at ``gevent.config.loop``).
|
||
> The ``GEVENTARES_SERVERS`` environment variable is deprecated in
|
||
favor of ``GEVENT_RESOLVER_SERVERS``. See :issue:`1103`.
|
||
+ Other Changes
|
||
* The internal, undocumented module ``gevent._threading`` has been
|
||
simplified.
|
||
* The internal, undocumented class ``gevent._socket3._fileobject`` has
|
||
been removed. See :issue:`1084`.
|
||
* Simplify handling of the libev default loop and the ``destroy()``
|
||
method. The default loop, when destroyed, can again be requested and
|
||
it will regenerate itself. The default loop is the only one that can
|
||
receive child events.
|
||
* Make :meth:`gevent.socket.socket.sendall` up to ten times faster on
|
||
PyPy3, through the same change that was applied in gevent 1.1b3 for PyPy2.
|
||
* Be more careful about issuing a warning about patching SSL on
|
||
Python 2. See :issue:`1108`.
|
||
* Signal handling under PyPy with libuv is more reliable. See
|
||
:issue:`1112`.
|
||
* The :mod:`gevent.greenlet` module is now compiled with Cython to
|
||
offset any performance decrease due to :issue:`755`. Please open
|
||
issues for any compatibility concerns. See :pr:`1115` and :pr:`1120`.
|
||
* On CPython, allow the pure-Python implementations of
|
||
`gevent.Greenlet`, `gevent.local` and `gevent.lock` to be
|
||
used when the environment variable ``PURE_PYTHON`` is set. This is
|
||
not recommended except for debugging and testing. See :issue:`1118`.
|
||
* :meth:`gevent.select.poll.poll` now interprets a *timeout* of -1 the
|
||
same as a *timeout* of *None* as the standard requires. Previously,
|
||
on libuv this was interpreted the same as a *timeout* of 0. In
|
||
addition, all *timeout* values less than zero are interpreted like
|
||
*None* (as they always were under libev). See :issue:`1127`.
|
||
* Monkey-patching now defaults to patching ``threading.Event``.
|
||
* ``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
|
||
prints a warning because this can produce ``RecursionError``.
|
||
* :class:`gevent.local.local` objects are now approximately 3.5 times faster
|
||
getting, setting and deleting attributes on PyPy. This involved
|
||
implementing more of the attribute protocols directly. Please open
|
||
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
|
||
:meth:`gevent.subprocess.Popen.terminate`. Reported in :issue:`1023`
|
||
by Giacomo Debidda.
|
||
* 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`.
|
||
* gevent now approximately tries to stick to a scheduling interval
|
||
when running callbacks, instead of simply running a count of
|
||
callbacks. The interval is determined by
|
||
:func:`gevent.getswitchinterval`. On Python 3, this is the same as
|
||
the thread switch interval. On Python 2, this defaults to 0.005s and
|
||
can be changed with :func:`gevent.setswitchinterval`. This should
|
||
result in more fair "scheduling" of greenlets, especially when
|
||
``gevent.sleep(0)`` or other busy callbacks are in use. The interval
|
||
is checked every 50 callbacks to keep overhead low. See
|
||
:issue:`1072`. With thanks to Arcadiy Ivanov and Antonio Cuni.
|
||
* The long-deprecated and undocumented module ``gevent.wsgi`` was removed.
|
||
+ libuv
|
||
* Add initial *experimental* support for using libuv as a backend
|
||
instead of libev, controlled by setting the environment variable
|
||
``GEVENT_CORE_CFFI_ONLY=libuv`` before importing gevent. This
|
||
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
|
||
support a resolution of 1ms (in practice, it's closer to 1.5ms).
|
||
Attempting to use something smaller will automatically increase it
|
||
to 1ms and issue a warning. Because libuv only supports
|
||
millisecond resolution by rounding a higher-precision clock to an
|
||
integer number of milliseconds, timers apparently suffer from more
|
||
jitter.
|
||
> Using negative timeouts may behave differently from libev.
|
||
> libuv blocks delivery of all signals, so signals are handled using
|
||
an (arbitrary) 0.3 second timer. This means that signal handling
|
||
will be delayed by up to that amount, and that the longest the
|
||
event loop can sleep in the operating system's ``poll`` call is
|
||
that amount. Note that this is what gevent does for libev on
|
||
Windows too.
|
||
> libuv only supports one io watcher per file descriptor, whereas
|
||
libev and gevent have always supported many watchers using
|
||
different settings. The libev behaviour is emulated at the Python
|
||
level, but that adds overhead.
|
||
> Looping multiple times and expecting events for the same file
|
||
descriptor to be raised each time without any data being read or
|
||
written (as works with libev) does not appear to work correctly on
|
||
Linux when using ``gevent.select.poll`` or a monkey-patched
|
||
``selectors.PollSelector``.
|
||
> The build system does not support using a system libuv; the
|
||
embedded copy must be used. Using setuptools to compile libuv was
|
||
the most portable method found.
|
||
> If anything unexpected happens, libuv likes to ``abort()`` the
|
||
entire process instead of reporting an error. For example, closing
|
||
a file descriptor it is using in a watcher may cause the entire
|
||
process to be exited.
|
||
> There may be occasional otherwise unexplained and hard to
|
||
duplicate crashes. If you can duplicate a crash, **please** submit
|
||
an issue.
|
||
> This is the only backend that PyPy can use on Windows. As of this
|
||
alpha, there are many known issues with non-blocking sockets
|
||
(e.g., as used by :mod:`asyncore`; see ``test_ftplib.py``) and
|
||
sometimes sockets not getting closed in a timely fashion
|
||
(apparently; see ``test_httpservers.py``) and communicating with
|
||
subprocesses (it always hangs). Help tracking those down would be
|
||
appreciated. Only PyPy2 is tested.
|
||
Other differences include:
|
||
> The order in which timers and other callbacks are invoked may be
|
||
different than in libev. In particular, timers and IO callbacks
|
||
happen in a different order, and timers may easily be off by up to
|
||
half of the supposed 1ms resolution. See :issue:`1057`.
|
||
> Starting a ``timer`` watcher does not update the loop's time by
|
||
default. This is because, unlike libev, a timer callback can cause
|
||
other timer callbacks to be run if they expire because the loop's
|
||
time updated, without cycling the event loop. See :issue:`1057`.
|
||
libev has also been changed to follow this behaviour.
|
||
Also see :issue:`1072`.
|
||
> Timers of zero duration do not necessarily cause the event loop to
|
||
cycle, as they do in libev. Instead, they may be called
|
||
immediately. If zero duration timers are added from other zero
|
||
duration timer callbacks, this can lead the loop to appear to
|
||
hang, as no IO will actually be done.
|
||
To mitigate this issue, ``loop.timer()`` detects attempts to use
|
||
zero duration timers and turns them into a check watcher. check
|
||
watchers do not support the ``again`` method.
|
||
> All watchers (e.g., ``loop.io``) and the ``Timeout`` class have a
|
||
``close`` method that should be called when code is done using the
|
||
object (they also function as context managers and a ``with``
|
||
statement will automatically close them). gevent does this
|
||
internally for sockets, file objects and internal timeouts.
|
||
Neglecting to close an object may result in leaking native
|
||
resources. To debug this, set the environment variables
|
||
``GEVENT_DEBUG=debug`` and ``PYTHONTRACEMALLOC=n`` before starting
|
||
the process.
|
||
The traditional cython-based libev backend will not leak if
|
||
``close`` is not called and will not produce warnings. The
|
||
CFFI-based libev backend will not currently leak but will produce
|
||
warnings. The CFFI-based libuv backend may leak and will produce
|
||
warnings.
|
||
Again, this is extremely experimental and all of it is subject to
|
||
change.
|
||
See :issue:`790` for history and more in-depth discussion.
|
||
+ libev
|
||
* The C extension has been updated to use more modern Cython idioms
|
||
and generate less code for simplicity, faster compilation and better
|
||
cache usage. See :pr:`1077`.
|
||
> Watcher objects may be slightly larger. On a 64-bit platform, a
|
||
typical watcher may be 16 bytes (2 pointers) larger. This is
|
||
offset by slight performance gains.
|
||
> Cython is no longer preprocessed. Certain attributes that were
|
||
previously only defined in certain compilation modes (notably
|
||
LIBEV_EMBED) are now always defined, but will raise
|
||
``AttributeError`` or have a negative value when not available. In
|
||
general these attributes are not portable or documented and are
|
||
not implemented by libuv or the CFFI backend. See :issue:`1076`.
|
||
> Certain private helper functions (``gevent_handle_error``, and part of
|
||
``gevent_call``) are now implemented in Cython instead of C. This
|
||
reduces our reliance on internal undocumented implementation
|
||
details of Cython and Python that could change. See :pr:`1080`.
|
||
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Mar 6 15:26:44 UTC 2018 - aplanas@suse.com
|
||
|
||
- Allows Recommends and Suggest in Fedora
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Feb 27 17:32:29 UTC 2018 - aplanas@suse.com
|
||
|
||
- Recommends only for SUSE
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Jan 23 13:34:36 UTC 2018 - dimstar@opensuse.org
|
||
|
||
- Disable building of the documentation: the make html call fails
|
||
already, and with rpm 4.14, this aborts the entire build.
|
||
- Drop python-Sphinx buildrequires: not needed when not building
|
||
the docs.
|
||
|
||
-------------------------------------------------------------------
|
||
Wed Nov 22 15:29:26 UTC 2017 - jmatejek@suse.com
|
||
|
||
- add greenlet dependency to Python 3 as well (bsc#1055386)
|
||
|
||
-------------------------------------------------------------------
|
||
Sun Nov 12 16:56:47 UTC 2017 - arun@gmx.de
|
||
|
||
- specfile:
|
||
* added CHANGES.rst CONTRIBUTING.rst to %doc
|
||
|
||
- update to version 1.2.2:
|
||
* Testing on Python 3.5 now uses Python 3.5.3 due to SSL
|
||
changes. See :issue:`943`.
|
||
* Linux CI has been updated from Ubuntu 12.04 to Ubuntu 14.04 since
|
||
the former has reached EOL.
|
||
* Linux CI now tests on PyPy2 5.7.1, updated from PyPy2 5.6.0.
|
||
* Linux CI now tests on PyPy3 3.5-5.7.1-beta, updated from PyPy3
|
||
3.3-5.5-alpha.
|
||
* Python 2 sockets are compatible with the SOCK_CLOEXEC flag found
|
||
on Linux. They no longer pass the socket type or protocol to
|
||
getaddrinfo when connect is called. Reported in :issue:`944` by
|
||
Bernie Hackett.
|
||
* Replace optparse module with argparse. See :issue:`947`.
|
||
* Update to version 1.3.1 of tblib to fix :issue:`954`, reported by
|
||
ml31415.
|
||
* Fix the name of the type parameter to
|
||
:func:`gevent.socket.getaddrinfo` to be correct on Python 3. This
|
||
would cause callers using keyword arguments to raise a
|
||
:exc:`TypeError`. Reported in :issue:`960` by js6626069. Likewise,
|
||
correct the argument names for fromfd and socketpair on Python 2,
|
||
although they cannot be called with keyword arguments under
|
||
CPython.
|
||
Note:
|
||
The gethost* functions take different argument names under CPython
|
||
and PyPy. gevent follows the CPython convention, although these
|
||
functions cannot be called with keyword arguments on CPython.
|
||
* The previously-singleton exception objects FileObjectClosed and
|
||
cancel_wait_ex were converted to classes. On Python 3, an
|
||
exception object is stateful, including references to its context
|
||
and possibly traceback, which could lead to objects remaining
|
||
alive longer than intended.
|
||
* Make sure that python -m gevent.monkey <script> runs code in the
|
||
global scope, not the scope of the main function. Fixed in
|
||
:pr:`975` by Shawn Bohrer.
|
||
|
||
-------------------------------------------------------------------
|
||
Wed May 31 19:30:52 UTC 2017 - dmueller@suse.com
|
||
|
||
- adjust buildrequirements for singlespec building on SLE_12
|
||
|
||
-------------------------------------------------------------------
|
||
Wed Apr 19 20:55:27 UTC 2017 - toddrme2178@gmail.com
|
||
|
||
- Update to version 1.2.1
|
||
* CI services now test on 3.6.0.
|
||
* Windows: Provide ``socket.socketpair`` for all Python 3 versions.
|
||
This was added to Python 3.5, but tests were only added in 3.6.
|
||
(For versions older than 3.4 this is a gevent extension.) Previously
|
||
this was not supported on any Python 3 version.
|
||
* Windows: List ``subprocess.STARTUPINFO`` in ``subprocess.__all__``
|
||
for 3.6 compatibility.
|
||
* The ``_DummyThread`` objects created by calling
|
||
:func:`threading.current_thread` from inside a raw
|
||
:class:`greenlet.greenlet` in a system with monkey-patched
|
||
``threading`` now clean up after themselves when the
|
||
greenlet dies (:class:`gevent.Greenlet`-based ``_DummyThreads`` have
|
||
always cleaned up). This requires the use of a :class:`weakref.ref`
|
||
(and may not be timely on PyPy).
|
||
Reported in :issue:`918` by frozenoctobeer.
|
||
* Build OS X wheels with ``-D_DARWIN_FEATURE_CLOCK_GETTIME=0`` for
|
||
compatibility with OS X releases before 10.12 Sierra. Reported by
|
||
Ned Batchelder in :issue:`916`.
|
||
- Update to version 1.2.0
|
||
* The c-ares DNS resolver ignores bad flags to getnameinfo, like the
|
||
system resolver does. Discovered when cleaning up the DNS resolver
|
||
tests to produce more reliable results. See :issue:`774`.
|
||
- Update to version 1.2a2
|
||
* Update libev to version 4.23.
|
||
* Allow the ``MAKE`` environment variable to specify the make command
|
||
on non-Windows systems for ease of development on BSD systems where
|
||
``make`` is BSD make and ``gmake`` is GNU make (gevent requires GNU
|
||
make). See :issue:`888`.
|
||
* Let :class:`gevent.server.StreamServer` accept an ``SSLContext`` on
|
||
Python versions that support it. Added in :pr:`904` by Arcadiy Ivanov.
|
||
- Update to version 1.2a1
|
||
+ Incompatible Changes
|
||
* Support for Python 2.6 has been removed. See :pr:`766`.
|
||
* Remove module ``gevent.coros`` which was replaced by ``gevent.lock``
|
||
and has been deprecated since 1.0b2.
|
||
* The internal implementation modules ``gevent.corecext`` and
|
||
``gevent.corecffi`` have been moved. Please import from
|
||
``gevent.core`` instead; this has always been the only documented place to
|
||
import from.
|
||
+ Libraries and Installation
|
||
* Update libev to version 4.22 (was 4.20).
|
||
* Update tblib to 1.3.0.
|
||
* Update Cython to 0.25 (was 0.23.5).
|
||
* Update c-ares to version 1.12.0 (was 1.10.0) (`release notes <https://c-ares.haxx.se/changelog.html>`_).
|
||
* For the benefit of downstream package maintainers, gevent is now
|
||
tested with c-ares and libev linked dynamically and not embedded
|
||
(i.e., using the system libraries). However, only the versions
|
||
shipped with gevent are tested and known to work.
|
||
* The repository directory layout has been changed to make it easier
|
||
to include third-party dependencies. Likewise, the setup.py script
|
||
has been split to make it easier to build third-party dependencies.
|
||
* PyPy/CFFI: The corecffi native extension is now only built at
|
||
installation time. Previously, if it wasn't available, a build was
|
||
attempted at every import. This could lead to scattered "gevent"
|
||
directories and undependable results.
|
||
* setuptools is now required at build time on all platforms.
|
||
Previously it was only required for Windows and PyPy.
|
||
* POSIX: Don't hardcode ``/bin/sh`` into the configuration command
|
||
line, instead relying on ``sh`` being on the ``PATH``, as
|
||
recommended by `the standard <http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html>`_.
|
||
Fixed in :pr:`809` by Fredrix Fornwall.
|
||
+ Security
|
||
* :mod:`gevent.pywsgi` now checks that the values passed to
|
||
``start_response`` do not contain a carriage return or newline in
|
||
order to prevent HTTP response splitting (header injection), raising
|
||
a :exc:`ValueError` if they do. See :issue:`775`.
|
||
* Incoming headers containing an underscore are no longer placed in
|
||
the WSGI environ. See :issue:`819`.
|
||
* Errors logged by :class:`~gevent.pywsgi.WSGIHandler` no
|
||
longer print the entire WSGI environment by default. This avoids
|
||
possible information disclosure vulnerabilities. Applications can
|
||
also opt-in to a higher security level for the WSGI environment if they
|
||
choose and their frameworks support it. Originally reported
|
||
in :pr:`779` by sean-peters-au and changed in :pr:`781`.
|
||
+ Platforms
|
||
* As mentioned above, Python 2.6 is no longer supported.
|
||
* Python 3.6 is now tested on POSIX platforms. This includes a few
|
||
notable changes:
|
||
* SSLContext.wrap_socket accepts the ``session`` parameter, though
|
||
this parameter isn't useful prior to 3.6.
|
||
* SSLSocket.recv(0) or read(0) returns an empty byte string. This is
|
||
a fix for `Python bug #23804 <http://bugs.python.org/issue23804>`_
|
||
which has also been merged into Python 2.7 and Python 3.5.
|
||
* PyPy3 5.5.0 *alpha* (supporting Python 3.3.5) is now tested and passes the
|
||
test suite. Thanks to btegs for :issue:`866`, and Fabio Utzig for :pr:`826`.
|
||
Note that PyPy3 is not optimized for performance either by the PyPy
|
||
developers or under gevent, so it may be significantly slower than PyPy2.
|
||
+ Stdlib Compatibility
|
||
* The modules :mod:`gevent.os`, :mod:`gevent.signal` and
|
||
:mod:`gevent.select` export all the attributes from their
|
||
corresponding standard library counterpart.
|
||
* Python 2: ``reload(site)`` no longer fails with a ``TypeError`` if
|
||
gevent has been imported. Reported in :issue:`805` by Jake Hilton.
|
||
* Python 2: ``sendall`` on a non-blocking socket could spuriously fail
|
||
with a timeout.
|
||
+ select/poll
|
||
* If :func:`gevent.select.select` is given a negative *timeout*
|
||
argument, raise an exception like the standard library does.
|
||
* If :func:`gevent.select.select` is given closed or invalid
|
||
file descriptors in any of its lists, raise the appropriate
|
||
``EBADF`` exception like the standard library does. Previously,
|
||
libev would tend to return the descriptor as ready. In the worst
|
||
case, this adds an extra system call, but may also reduce latency if
|
||
descriptors are ready at the time of entry.
|
||
* :class:`selectors.SelectSelector` is properly monkey-patched
|
||
regardless of the order of imports. Reported in :issue:`835` by
|
||
Przemysław Węgrzyn.
|
||
* :meth:`gevent.select.poll.unregister` raises an exception if *fd* is not
|
||
registered, like the standard library.
|
||
* :meth:`gevent.select.poll.poll` returns an event with
|
||
``POLLNVAL`` for registered fds that are invalid. Previously it
|
||
would tend to report both read and write events.
|
||
+ File objects
|
||
* ``FileObjectPosix`` exposes the ``read1`` method when in read mode,
|
||
and generally only exposes methods appropriate to the mode it is in.
|
||
* ``FileObjectPosix`` supports a *bufsize* of 0 in binary write modes.
|
||
Reported in :issue:`840` by Mike Lang.
|
||
* Python 3: :meth:`gevent.socket.connect_ex` was letting
|
||
``BlockingIOError`` (and possibly others) get raised instead of
|
||
returning the errno due to the refactoring of the exception
|
||
hierarchy in Python 3.3. Now the errno is returned. Reported in
|
||
:issue:`841` by Dana Powers.
|
||
+ Other Changes
|
||
* :class:`~.Group` and :class:`~.Pool` now return whether
|
||
:meth:`~.Group.join` returned with an empty group. Suggested by Filippo Sironi in
|
||
:pr:`503`.
|
||
* Unhandled exception reports that kill a greenlet now include a
|
||
timestamp. See :issue:`137`.
|
||
* :class:`~.PriorityQueue` now ensures that an initial items list is a
|
||
valid heap. Fixed in :pr:`793` by X.C.Dong.
|
||
* :class:`gevent.hub.signal` (aka :func:`gevent.signal`) now verifies
|
||
that its `handler` argument is callable, raising a :exc:`TypeError`
|
||
if it isn't. Reported in :issue:`818` by Peter Renström.
|
||
* If ``sys.stderr`` has been monkey-patched (not recommended),
|
||
exceptions that the hub reports aren't lost and can still be caught.
|
||
Reported in :issue:`825` by Jelle Smet.
|
||
* The :func:`gevent.os.waitpid` function is cooperative in more
|
||
circumstances. Reported in :issue:`878` by Heungsub Lee.
|
||
* The various ``FileObject`` implementations are more consistent with
|
||
each other. **Note:** Writing to the *io* property of a FileObject should be
|
||
considered deprecated.
|
||
* Timeout exceptions (and other asynchronous exceptions) could cause
|
||
the BackdoorServer to fail to properly manage the
|
||
stdout/stderr/stdin values. Reported with a patch in :pr:`874` by
|
||
stefanmh.
|
||
* The BackDoorServer now tracks spawned greenlets (connections) and
|
||
kills them in its ``stop`` method.
|
||
+ Servers
|
||
* Default to AF_INET6 when binding to all addresses (e.g.,
|
||
""). This supports both IPv4 and IPv6 connections (except on
|
||
Windows). Original change in :pr:`495` by Felix Kaiser.
|
||
* pywsgi/performance: Chunks of data the application returns are no longer copied
|
||
before being sent to the socket when the transfer-encoding is
|
||
chunked, potentially reducing overhead for large responses.
|
||
+ Threads
|
||
* Add :class:`gevent.threadpool.ThreadPoolExecutor` (a
|
||
:class:`concurrent.futures.ThreadPoolExecutor` variant that always
|
||
uses native threads even when the system has been monkey-patched)
|
||
on platforms that have ``concurrent.futures``
|
||
available (Python 3 and Python 2 with the ``futures`` backport
|
||
installed). This is helpful for, e.g., grpc. Reported in
|
||
:issue:`786` by Markus Padourek.
|
||
* Native threads created before monkey-patching threading can now be
|
||
joined. Previously on Python < 3.4, doing so would raise a
|
||
``LoopExit`` error. Reported in :issue:`747` by Sergey Vasilyev.
|
||
+ SSL
|
||
* On Python 2.7.9 and above (more generally, when the SSL backport is
|
||
present in Python 2), :func:`gevent.ssl.get_server_certificate`
|
||
would raise a :exc:`ValueError` if the system wasn't monkey-patched.
|
||
Reported in :issue:`801` by Gleb Dubovik.
|
||
* On Python 2.7.9 and Python 3, closing an SSL socket in one greenlet
|
||
while it's being read from or written to in a different greenlet is
|
||
less likely to raise a :exc:`TypeError` instead of a
|
||
:exc:`ValueError`. Reported in :issue:`800` by Kevin Chen.
|
||
+ subprocess module
|
||
* Setting SIGCHLD to SIG_IGN or SIG_DFL after :mod:`gevent.subprocess`
|
||
had been used previously could not be reversed, causing
|
||
``Popen.wait`` and other calls to hang. Now, if SIGCHLD has been
|
||
ignored, the next time :mod:`gevent.subprocess` is used this will be
|
||
detected and corrected automatically. (This potentially leads to
|
||
issues with :func:`os.popen` on Python 2, but the signal can always
|
||
be reset again. Mixing the low-level process handling calls,
|
||
low-level signal management and high-level use of
|
||
:mod:`gevent.subprocess` is tricky.) Reported in :issue:`857` by
|
||
Chris Utz.
|
||
* ``Popen.kill`` and ``send_signal`` no longer attempt to send signals
|
||
to processes that are known to be exited.
|
||
+ Several backwards compatible updates to the subprocess module have
|
||
been backported from Python 3 to Python 2, making
|
||
:mod:`gevent.subprocess` smaller, easier to maintain and in some cases
|
||
safer.
|
||
* Popen objects can be used as context managers even on Python 2. The
|
||
high-level API functions (``call``, etc) use this for added safety.
|
||
* The :mod:`gevent.subprocess` module now provides the
|
||
:func:`gevent.subprocess.run` function in a cooperative way even
|
||
when the system is not monkey patched, on all supported versions of
|
||
Python. (It was added officially in Python 3.5.)
|
||
* Popen objects save their *args* attribute even on Python 2.
|
||
* :exc:`gevent.subprocess.TimeoutExpired` is defined even on Python 2,
|
||
where it is a subclass of the :exc:`gevent.timeout.Timeout`
|
||
exception; all instances where a ``Timeout`` exception would
|
||
previously be thrown under Python 2 will now throw a
|
||
``TimeoutExpired`` exception.
|
||
* :func:`gevent.subprocess.call` (and ``check_call``) accepts the
|
||
*timeout* keyword argument on Python 2. This is standard on Python
|
||
3, but a gevent extension on Python 2.
|
||
* :func:`gevent.subprocess.check_output` accepts the *timeout* and
|
||
*input* arguments on Python 2. This is standard on Python 3, but a
|
||
gevent extension on Python 2.
|
||
- Implement single-spec version
|
||
- Add rpmlintrc to deal with source files used by cffi.
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Dec 13 14:46:50 UTC 2016 - dmueller@suse.com
|
||
|
||
- update to 1.1.2:
|
||
* Python 2: ``sendall`` on a non-blocking socket could spuriously fail
|
||
with a timeout.
|
||
* If ``sys.stderr`` has been monkey-patched (not recommended),
|
||
exceptions that the hub reports aren't lost and can still be caught.
|
||
Reported in :issue:`825` by Jelle Smet.
|
||
* :class:`selectors.SelectSelector` is properly monkey-patched
|
||
regardless of the order of imports. Reported in :issue:`835` by
|
||
Przemysław Węgrzyn.
|
||
* Python 2: ``reload(site)`` no longer fails with a ``TypeError`` if
|
||
gevent has been imported. Reported in :issue:`805` by Jake Hilton.
|
||
* Nested callbacks that set and clear an Event no longer cause
|
||
``wait`` to return prematurely. Reported in :issue:`771` by Sergey
|
||
Vasilyev.
|
||
* Fix build on Solaris 10. Reported in :issue:`777` by wiggin15.
|
||
* The ``ref`` parameter to :func:`gevent.os.fork_and_watch` was being ignored.
|
||
* Python 3: :class:`gevent.queue.Channel` is now correctly iterable, instead of
|
||
raising a :exc:`TypeError`.
|
||
* Python 3: Add support for :meth:`socket.socket.sendmsg`,
|
||
:meth:`socket.socket.recvmsg` and :meth:`socket.socket.recvmsg_into`
|
||
on platforms where they are defined. Initial :pr:`773` by Jakub
|
||
Klama.
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Mar 10 20:20:38 UTC 2016 - toddrme2178@gmail.com
|
||
|
||
- Update to 1.1.0 (final):
|
||
* See changelog.rst for detailed informations
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Jan 29 09:14:54 UTC 2016 - tchvatal@suse.com
|
||
|
||
- Update to 1.1rc3:
|
||
* See changelog.rst for detailed informations
|
||
|
||
-------------------------------------------------------------------
|
||
Wed Jul 1 12:54:10 UTC 2015 - tchvatal@suse.com
|
||
|
||
- Bump once more to 1.1a1:
|
||
* See changelog.rst for detailed informations
|
||
* The py2.7 compat in 1.0.2 behaves weirdly on openSUSE,
|
||
this release seems way nicer on that front
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Jun 30 08:48:56 UTC 2015 - tchvatal@suse.com
|
||
|
||
- Version bump to 1.0.2:
|
||
- Fix LifoQueue.peek() to return correct element. PR #456. Patch by Christine
|
||
Spang.
|
||
- Upgrade to libev 4.19
|
||
- Remove SSL3 entirely as default TLS protocol
|
||
- Import socket on Windows (closes #459)
|
||
- Fix C90 syntax error (PR #449)
|
||
- Add compatibility with Python 2.7.9's SSL changes. Issue #477.
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Nov 18 14:00:29 UTC 2014 - toddrme2178@gmail.com
|
||
|
||
- Update to 1.0.1
|
||
- Upgrade libev to 4.15. This fixes #361: installation on armv5.
|
||
- Better support for win64. Patch by Alexey Borzenkov.
|
||
- Fix #423: Pool's imap/imap_unordered could hang forever. Based on patch and test by Jianfei Wang.
|
||
- Enable libev's check watchers.
|
||
- Add dummy Event._reset_internal_locks() method. Only relevant if patch_all(Event=True) is enabled (non-default).
|
||
- Backport new testrunner.py from master branch.
|
||
- Removed upstream included libev.patch
|
||
|
||
-------------------------------------------------------------------
|
||
Thu Jun 12 08:47:18 UTC 2014 - schwab@suse.de
|
||
|
||
- libev.patch: fix syntax error in preprocessor conditional
|
||
|
||
-------------------------------------------------------------------
|
||
Sun Dec 15 15:01:04 UTC 2013 - p.drouand@gmail.com
|
||
|
||
- Update to version 1.0
|
||
+ pywsgi: Pass copy of error list instead of direct reference
|
||
+ Ignore the autogenerated doc/gevent.*.rst files.
|
||
+ Fix cythonpp.py on Windows.
|
||
+ Remove gevent.run (use gevent.wait).
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Oct 26 16:23:38 UTC 2012 - douglarek@outlook.com
|
||
|
||
- Update to version 0.13.8:
|
||
|
||
* Fixed issue #80: gevent.httplib failed with RequestFailed errors because timeout was reset to 1s. Patch by Tomasz Prus.
|
||
* core: fix compilation with the latest Cython: remove emit_ifdef/emit_else/emit_endif.
|
||
* Fixed issue #132: gevent.socket.gethostbyname(<unicode>) now does ascii encoding and uses gevent's resolver rather than
|
||
calling built-in resolver. Patch by Alexey Borzenkov.
|
||
|
||
|
||
-------------------------------------------------------------------
|
||
Mon Jun 25 15:19:15 UTC 2012 - saschpe@suse.de
|
||
|
||
- Update to version 0.13.7:
|
||
+ Fixed #94: fallback to buffer if memoryview fails in _get_memory on
|
||
python 2.7.
|
||
+ Fixed #103: ``Queue(None).full()`` returns ``False`` now (previously
|
||
it returned ``True``).
|
||
+ Fixed #112: threading._sleep is not patched.
|
||
+ Fixed #115: _dummy gets unexpected Timeout arg.
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Mar 27 11:41:44 UTC 2012 - saschpe@suse.de
|
||
|
||
- Run testsuite
|
||
- Require python-greenlet
|
||
- Simplify macro usage
|
||
|
||
-------------------------------------------------------------------
|
||
Fri Nov 18 14:17:34 UTC 2011 - saschpe@suse.de
|
||
|
||
- Cython should not be needed, gevent is build as a binary module
|
||
|
||
-------------------------------------------------------------------
|
||
Tue Jul 19 12:23:20 UTC 2011 - saschpe@suse.de
|
||
|
||
- Initial version
|
||
|