Metadata-Version: 2.1
Name: opencensus-context
Version: 0.1.2
Summary: OpenCensus Runtime Context
Home-page: https://github.com/census-instrumentation/opencensus-python/tree/master/context/opencensus-context
Author: OpenCensus Authors
Author-email: census-developers@googlegroups.com
License: Apache-2.0
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Dist: contextvars ; python_version >= "3.6" and python_version < "3.7"

OpenCensus Runtime Context
============================================================================

|pypi|

.. |pypi| image:: https://badge.fury.io/py/opencensus-context.svg
   :target: https://pypi.org/project/opencensus-context/

The **OpenCensus Runtime Context** provides in-process context propagation.
By default, ``thread local storage`` is used for Python 2.7, 3.4 and 3.5;
``contextvars`` is used for Python >= 3.6, which provides ``asyncio`` support.

Installation
------------

This library is installed by default with ``opencensus``, there is no need
to install it explicitly.

Usage
-----

In most cases context propagation happens automatically within a process,
following the control flow of threads and asynchronous coroutines. The runtime
context is a dictionary stored in a `context variable <https://docs.python.org/3/library/contextvars.html>`_
when available, and in `thread local storage <https://docs.python.org/2/library/threading.html#threading.local>`_
otherwise.

There are cases where you may want to propagate the context explicitly:

Explicit Thread Creation
~~~~~~~~~~~~~~~~~~~~~~~~

.. code:: python

    from threading import Thread
    from opencensus.common.runtime_context import RuntimeContext

    def work(name):
        # here you will get the context from the parent thread
        print(RuntimeContext)

    thread = Thread(
        # propagate context explicitly
        target=RuntimeContext.with_current_context(work),
        args=('foobar',),
    )
    thread.start()
    thread.join()

Thread Pool
~~~~~~~~~~~

.. code:: python

    from multiprocessing.dummy import Pool as ThreadPool
    from opencensus.common.runtime_context import RuntimeContext

    def work(name):
        # here you will get the context from the parent thread
        print(RuntimeContext)

    pool = ThreadPool(2)
    # propagate context explicitly
    pool.map(RuntimeContext.with_current_context(work), [
        'bear',
        'cat',
        'dog',
        'horse',
        'rabbit',
    ])
    pool.close()
    pool.join()

References
----------

* `Examples <https://github.com/census-instrumentation/opencensus-python/tree/master/context/opencensus-context/examples>`_
* `OpenCensus Project <https://opencensus.io/>`_


