gevent.monkey– Make the standard library cooperative¶
The primary purpose of this module is to carefully patch, in place, portions of the standard library with gevent-friendly functions that behave in the same way as the original (at least as closely as possible).
The primary interface to this is the
patch_all() function, which
performs all the available patches. It accepts arguments to limit the
patching to certain modules, but most programs will want to use the
default values as they receive the most wide-spread testing.
Patching should be done as early as possible in the lifecycle of the
program. For example, the main module (the one that tests against
__main__ or is otherwise the first imported) should begin with
this code, ideally before any other imports:
from gevent import monkey monkey.patch_all()
Some frameworks, such as gunicorn, handle monkey-patching for you. Check their documentation to be sure.
Sometimes it is useful to run existing python scripts or modules that
were not built to be gevent aware under gevent. To do so, this module
can be run as the main module, passing the script and its arguments.
For details, see the
patch_all(socket=True, dns=True, time=True, select=True, thread=True, os=True, ssl=True, httplib=False, subprocess=True, sys=False, aggressive=True, Event=False, builtins=True, signal=True)¶
Do all of the default monkey patching (calls every other applicable function in this module).
Make the builtin __import__ function greenlet safe under Python 2.
This does nothing under Python 3 as it is not necessary. Python 3 features improved import locks that are per-module, not global.
Replace DNS functions in
socket with cooperative versions.
This is only useful if
patch_socket() has been called and is done automatically
by that method if requested.
aggressive is true (the default), also remove other
blocking functions from
select and (on Python 3.4 and
Make the signal.signal function work with a monkey-patched os.
Replace the standard socket object with gevent’s cooperative sockets.
dns is true, also patch dns functions in
Replace SSLSocket object and socket wrapping functions in
ssl with cooperative versions.
This is only useful if
patch_socket() has been called.
On Windows under Python 3, the API support may not completely match the standard library.
patch_sys(stdin=True, stdout=True, stderr=True)¶
Patch sys.std[in,out,err] to use a cooperative IO via a threadpool.
This is relatively dangerous and can have unintended consequences such as hanging
the process or misinterpreting control keys when
This method does nothing on Python 3. The Python 3 interpreter wants to flush the TextIOWrapper objects that make up stderr/stdout at shutdown time, but using a threadpool at that time leads to a hang.
patch_thread(threading=True, _threading_local=True, Event=False, logging=True, existing_locks=True)¶
Replace the standard
thread module to make it greenlet-based.
threading.RLock(and, under Python 3,
importlib._bootstrap._ModuleLock) instances that are currently locked can be properly unlocked.
Retrieve the original object from a module.
If the object has not been patched, then that object will still be retrieved.
|Parameters:||item_name – A string or sequence of strings naming the attribute(s) on the module
|Returns:||The original value if a string was given for
Check if a module has been replaced with a cooperative version.
Check if an object in a module has been replaced with a cooperative version.
gevent.monkey - monkey patch the standard modules to use gevent.
USAGE: python -m gevent.monkey [MONKEY OPTIONS] script [SCRIPT OPTIONS]
If no OPTIONS present, monkey patches all the modules it can patch. You can exclude a module with –no-module, e.g. –no-thread. You can specify a module to patch with –module, e.g. –socket. In the latter case only the modules specified on the command line will be patched.
MONKEY OPTIONS: –verbose –[no-]socket, –[no-]dns, –[no-]time, –[no-]select, –[no-]thread, –[no-]os, –[no-]ssl, –[no-]subprocess, –[no-]sys, –[no-]builtins, –[no-]signal