mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-31 14:11:50 +08:00
49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
"""
|
|
To trace a request in a ``gevent`` environment, configure the tracer to use the greenlet
|
|
context provider, rather than the default one that relies on a thread-local storaging.
|
|
|
|
This allows the tracer to pick up a transaction exactly where it left off as greenlets
|
|
yield the context to another one.
|
|
|
|
The simplest way to trace a ``gevent`` application is to configure the tracer and
|
|
patch ``gevent`` **before importing** the library::
|
|
|
|
# patch before importing gevent
|
|
from ddtrace import patch, tracer
|
|
patch(gevent=True)
|
|
|
|
# use gevent as usual with or without the monkey module
|
|
from gevent import monkey; monkey.patch_thread()
|
|
|
|
def my_parent_function():
|
|
with tracer.trace("web.request") as span:
|
|
span.service = "web"
|
|
gevent.spawn(worker_function)
|
|
|
|
def worker_function():
|
|
# then trace its child
|
|
with tracer.trace("greenlet.call") as span:
|
|
span.service = "greenlet"
|
|
...
|
|
|
|
with tracer.trace("greenlet.child_call") as child:
|
|
...
|
|
"""
|
|
from ...utils.importlib import require_modules
|
|
|
|
|
|
required_modules = ['gevent']
|
|
|
|
with require_modules(required_modules) as missing_modules:
|
|
if not missing_modules:
|
|
from .provider import GeventContextProvider
|
|
from .patch import patch, unpatch
|
|
|
|
context_provider = GeventContextProvider()
|
|
|
|
__all__ = [
|
|
'patch',
|
|
'unpatch',
|
|
'context_provider',
|
|
]
|