Skip to content
Back to top

# `gevent.contextvars` – Cooperative `contextvars`

Cooperative `contextvars` module.

This module was added to Python 3.7. The gevent version is available on all supported versions of Python. However, see an important note about gevent 20.9.

Context variables are like greenlet-local variables, just more inconvenient to use. They were designed to work around limitations in `asyncio` and are rarely needed by greenlet-based code.

The primary difference is that snapshots of the state of all context variables in a given greenlet can be taken, and later restored for execution; modifications to context variables are “scoped” to the duration that a particular context is active. (This state-restoration support is rarely useful for greenlets because instead of always running “tasks” sequentially within a single thread like `asyncio` does, greenlet-based code usually spawns new greenlets to handle each task.)

The gevent implementation is based on the Python reference implementation from PEP 567 and doesn’t have much optimization. In particular, setting context values isn’t constant time.

Added in version 1.5a3.

Changed in version 20.9.0: On Python 3.7 and above, this module is no longer monkey-patched in place of the standard library version. gevent depends on greenlet 0.4.17 which includes support for context variables. This means that any number of greenlets can be running any number of asyncio tasks each with their own context variables. This module is only greenlet aware, not asyncio task aware, so its use is not recommended on Python 3.7 and above.

On previous versions of Python, this module continues to be a solution for backporting code. It is also available if you wish to use the contextvar API in a strictly greenlet-local manner.

class Context

  Bases: `Mapping`

  Implementation of `contextvars.Context`

  Creates an empty context.

  copy()

    Return a shallow copy.

class ContextVar(name, default=<default value>)

  Bases: `object`

  Implementation of `contextvars.ContextVar`.

class Token(context, var, old_value)

  Bases: `object`

  Opaque implementation of `contextvars.Token`.

  property old_value

    A read-only attribute set to the value the variable had before the `set()` call, or to `MISSING` if the variable wasn’t set before.

  property var

    A read-only attribute pointing to the variable that created the token

copy_context()

  Return a shallow copy of the current context.