------------------------------------------------------------------- Thu Jan 2 14:09:44 CET 2020 - Matej Cepl - 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 - 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 - 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 - Switch to pkgconfig requirements as c-ares was renamed between SLE12 and SLE15 ------------------------------------------------------------------- Mon Feb 4 11:37:48 UTC 2019 - Antonio Larrosa - 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 - Make sure to skip tests that need network access ------------------------------------------------------------------- Thu Jan 31 09:42:44 UTC 2019 - Tomáš Chvátal - 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 - Switch the condition logic to match the previous changelog ------------------------------------------------------------------- Wed Jan 9 00:10:41 UTC 2019 - Jonathan Brownell - 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