setup.py
can be run from a directory containing spaces. Reported
in :issue:319
by Ivan Smirnov.setup.py
can build with newer versions of clang on OS X. They
enforce the distinction between CFLAGS and CPPFLAGS.gevent.lock.Semaphore
is atomic on PyPy, just like it is on
CPython. This comes at a small performance cost.- Fixed regression that failed to set the
successful
value to
False when killing a greenlet before it ran with a non-default
exception. Fixed in :pr:608
by Heungsub Lee. - libev's child watchers caused
os.waitpid
to become unreliable
due to the use of signals on POSIX platforms. This was especially
noticeable when usinggevent.subprocess
in combination with
multiprocessing
. Now, the monkey-patchedos
module provides
awaitpid
function that seeks to ameliorate this. Reported in
:issue:600
by champax and :issue:452
by Łukasz Kawczyński. - On platforms that implement
select.poll
, provide a
gevent-friendlygevent.select.poll
and corresponding
monkey-patch. Implemented in :pr:604
by Eddi Linder. - Allow passing of events to the io callback under PyPy. Reported in
:issue:531
by M. Nunberg and implemented in :pr:604
. gevent.thread.allocate_lock
(and so a monkey-patched standard
libraryallocate_lock
) more closely matches the behaviour of the
builtin: an unlocked lock cannot be released, and attempting to do
so throws the correct exception (thread.error
on Python 2,
RuntimeError
on Python 3). Previously, over-releasing a lock was
silently ignored. Reported in :issue:308
by Jędrzej Nowak.gevent.fileobject.FileObjectThread
uses the threadpool to close
the underling file-like object. Reported in :issue:201
by
vitaly-krugl.- Malicious or malformed HTTP chunked transfer encoding data sent to
thegevent.pywsgi
handler is handled more robustly, resulting in
"HTTP 400 bad request" responses instead of a 500 error or, in the
worst case, a server-side hang. Reported in :issue:229
by Björn
Lindqvist. - Importing the standard library
threading
module before using
gevent.monkey.patch_all()
no longer causes Python 3.4 to fail to
get therepr
of the main thread, and other CPython platforms to
return an unjoinable DummyThread. (Note that this is not
recommended.) Reported in :issue:153
. - Under Python 2, use the
io
package to implement
FileObjectPosix
. This unifies the code with the Python 3
implementation, and fixes problems with usingseek()
. See
:issue:151
. - Under Python 2, importing a module that uses gevent blocking
functions at its top level from multiple greenlets no longer
produces import errors (Python 3 handles this case natively).
Reported in :issue:108
by shaun and initial fix based on code by
Sylvain Zimmer. gevent.spawn
,spawn_raw
andspawn_later
, as well as the
Greenlet
constructor, immediately produce usefulTypeError
s
if asked to run something that cannot be run. Previously, the
spawned greenlet would die with an uncaughtTypeError
the first
time it was switched to. Reported in :issue:119
by stephan.- Recursive use of
gevent.threadpool.ThreadPool.apply
no longer
raises aLoopExit
error (usingThreadPool.spawn
and then
get
on the result still could; you must be careful to use the
correct hub). Reported in :issue:131
by 8mayday. - When the
threading
module is monkey-patched, the module-level
lock in thelogging
module is made greenlet-aware, as are the
instance locks of any configured handlers. This makes it safer to
import modules that use the standard pattern of creating a
module-levelLogger
instance before monkey-patching. Configuring
logging
with a basic configuration and then monkey-patching is
also safer (but not configurations that involve such things as the
SocketHandler
). - Fix monkey-patching of
threading.RLock
under Python 3. - Under Python 3, monkey-patching at the top-level of a module that
was imported by another module could result in aRuntimeError
fromimportlib
. Reported in :issue:615
by Daniel Mizyrycki.
(The same thing could happen under Python 2 if athreading.RLock
was held around the monkey-patching call; this is less likely but
not impossible with import hooks.) - Fix configuring c-ares for a 32-bit Python when running on a 64-bit
platform. Reported in :issue:381
and fixed in :pr:616
by Chris
Lane. - (Experimental) Let the
pywsgi.WSGIServer
accept a
logging.Logger
instance for itslog
and (new)error_log
parameters. Take care that the system is fully monkey-patched very
early in the process's lifetime if attempting this, and note that
non-file handlers have not been tested. Fixes :issue:106
.