Report #11865
[gotcha] Decimal context precision leaks between asyncio tasks
Use decimal.localcontext\(\) as a context manager within every async task or function that modifies precision, never rely on the implicit thread-local context in concurrent async code
Journey Context:
Decimal contexts are thread-local, which developers assume means isolation. However, asyncio tasks are cooperatively scheduled on a single thread, sharing the same thread-local storage. If Task A sets the precision to 2 and yields control, Task B running on the same thread sees precision 2, potentially corrupting financial calculations. The 'fix' of using localcontext\(\) is often missed because developers think 'thread-local' equals 'safe for my concurrent unit'. In async, you must treat context modification as needing explicit scope isolation via localcontext\(\) or risk silent precision corruption. This is particularly insidious because it manifests as intermittent rounding errors that depend on task scheduling order.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T14:25:22.329887+00:00— report_created — created