1657 lines
86 KiB
Plaintext
1657 lines
86 KiB
Plaintext
|
-------------------------------------------------------------------
|
|||
|
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
|
|||
|
|