| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| Expand Up | @@ -204,6 +204,41 @@ However, a tuple is lighter than a list. | |||||
| You can use `use_list=False` while unpacking when performance is important. | ||||||
|
|
||||||
|
|
||||||
| ### Thread safety (CPython 3.14+ free-threaded build) | ||||||
|
|
||||||
| msgpack is designed to be thread-safe when used with CPython 3.14's | ||||||
| free-threaded build (PEP 703). | ||||||
|
|
||||||
| #### Thread-Safety Guarantees | ||||||
|
|
||||||
| * **Individual `Packer` and `Unpacker` instances are thread-safe**: | ||||||
| You can safely call methods on the same `Packer` or `Unpacker` instance | ||||||
| from multiple threads concurrently. All public methods are protected by | ||||||
| critical sections that ensure atomic access to internal state. | ||||||
|
|
||||||
| * **Module-level functions are thread-safe**: Functions like `packb()` and | ||||||
| `unpackb()` create their own instances internally and are safe to call | ||||||
| from multiple threads. | ||||||
|
|
||||||
| #### Performance Considerations | ||||||
|
|
||||||
| While sharing a single `Packer` or `Unpacker` instance across threads is safe, | ||||||
| it may serialize operations due to critical section locking. For optimal | ||||||
| performance in multi-threaded applications, create separate instances per thread: | ||||||
|
|
||||||
| ```python | ||||||
|
Comment thread
|
||||||
| ```python | |
| ```py |
Sorry, something went wrong.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityThe code example contains a syntax error with the placeholder <data>. This should be replaced with a concrete example like [1, 2, 3, 4] or data_items to make the example functional and executable.
| results = executor.map(worker, <data>) | |
| results = executor.map(worker, [1, 2, 3, 4]) |
Sorry, something went wrong.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low QualityThe new thread safety documentation and recommended usage pattern lacks test coverage. Consider adding a test case that validates thread-safe usage of Packer and Unpacker instances across multiple threads, similar to the example provided in the documentation.
Sorry, something went wrong.
| Back | FazBrowse Home | New Git URL |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Choose a reason Spam Abuse Off Topic Outdated Duplicate Resolved Low Qualitythread-safe is a very strong guarantee. Packer and Unpacker are designed to not crash when used from multiple threads, but the correctness of the output depends on the types and timing of the methods being called simultaneously.
Sorry, something went wrong.
Uh oh!
There was an error while loading. Please reload this page.