❮ Back to FAQ

Python Features

How does Deploy Tracking work in Python?

Scout tracks deploys to correlate code changes with performance. Set the revision SHA via:

  1. Config API:
import os
from scout_apm.api import Config
Config.set(revision_sha=os.popen("git rev-parse HEAD").read().strip())
  1. Environment variable: SCOUT_REVISION_SHA=your_sha

  2. Heroku: Enable Dyno Metadata to auto-set HEROKU_SLUG_COMMIT

How do I add Custom Context?

Add business metadata to traces for filtering:

import scout_apm.api
scout_apm.api.Context.add("user_id", request.user.id)
scout_apm.api.Context.add("plan_type", "premium")

Keys must be alphanumeric with dashes/underscores (no spaces). Values can be any JSON-serializable type.

How do I rename a transaction?

Use rename_transaction() for custom naming:

import scout_apm.api
scout_apm.api.rename_transaction("Controller/custom_name")

For GraphQL, rename based on operation:

scout_apm.api.rename_transaction("Controller/" + derive_graphql_name())

Avoid high-cardinality names (like including user IDs).

How do I add custom instrumentation?

Scout provides two types of instrumentation:

Transactions - wrap flows of work (web requests, cron jobs):

with scout_apm.api.WebTransaction("Foo"):
    # work here

# Or for background tasks:
with scout_apm.api.BackgroundTransaction("Bar"):
    # work here

Timing - measure individual operations:

with scout_apm.api.instrument("Computation") as inst:
    inst.tag("record_count", 100)
    # work here

# Or as a decorator:
@scout_apm.api.instrument("Computation")
def my_function():
    # work here

How do I instrument async code?

Use the async_ decorator for async functions:

@scout_apm.api.WebTransaction.async_("Foo")
async def foo():
    # async work

@scout_apm.api.instrument.async_("Bar")
async def bar():
    # async work

How do I ignore a transaction?

Call ignore_transaction() within the request:

import scout_apm.api

if is_health_check():
    scout_apm.api.ignore_transaction()

For probability sampling:

import random
if random.uniform(0, 1) > 0.9:
    scout_apm.api.ignore_transaction()

Does Scout support ARM/Graviton?

Yes. The Python agent automatically detects ARM support. If needed, explicitly set the core_agent_triple configuration (e.g., x86_64-unknown-linux-musl for MUSL-based Linux).

Ready to Optimize Your App?

Join engineering teams who trust Scout Monitoring for hassle-free performance monitoring. With our 3-step setup, powerful tooling, and responsive support, you can quickly identify and fix performance issues before they impact your users.