Title: Add `--jsonl` flag to the `profiling.sampling` · Issue #146256 · python/cpython · GitHub
Open Graph Title: Add `--jsonl` flag to the `profiling.sampling` · Issue #146256 · python/cpython
X Title: Add `--jsonl` flag to the `profiling.sampling` · Issue #146256 · python/cpython
Description: Feature or enhancement Proposal: I'm thinking how to make #145464 more managable, and I realized that sole --jsonl is actually a good first step. Adding --jsonl does not depend actually on streaming and will be immediately useful anyway....
Open Graph Description: Feature or enhancement Proposal: I'm thinking how to make #145464 more managable, and I realized that sole --jsonl is actually a good first step. Adding --jsonl does not depend actually on streamin...
X Description: Feature or enhancement Proposal: I'm thinking how to make #145464 more managable, and I realized that sole --jsonl is actually a good first step. Adding --jsonl does not depend actually on stre...
Opengraph URL: https://github.com/python/cpython/issues/146256
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Add `--jsonl` flag to the `profiling.sampling`","articleBody":"# Feature or enhancement\n\n### Proposal:\n\n\nI'm thinking how to make #145464 more managable, and I realized that sole `--jsonl` is actually a good first step.\n\nAdding `--jsonl` does not depend actually on streaming and will be immediately useful anyway.\n\nThe format described in https://github.com/python/cpython/issues/145464 for:\n\n```\n% cat /tmp/hello_world.py\nimport time\nprint(\"Hello, World!\")\ntime.sleep(0.1)\n```\n\ncould be as simple as:\n\n```json\n{\"type\":\"meta\",\"v\":1,\"run_id\":\"ab2e464d9d814af4b653302f03256520\",\"sample_interval_usec\":1000,\"mode\":\"wall\"}\n{\"type\":\"str_def\",\"v\":1,\"run_id\":\"ab2e464d9d814af4b653302f03256520\",\"defs\":[{\"str_id\":1,\"value\":\"\u003cmodule\u003e\"},{\"str_id\":2,\"value\":\"/tmp/hello_world.py\"},{\"str_id\":3,\"value\":\"_run_code\"},{\"str_id\":4,\"value\":\"\u003cfrozen runpy\u003e\"},{\"str_id\":5,\"value\":\"_run_module_as_main\"}]}\n{\"type\":\"frame_def\",\"v\":1,\"run_id\":\"ab2e464d9d814af4b653302f03256520\",\"defs\":[{\"frame_id\":1,\"path_str_id\":2,\"func_str_id\":1,\"line\":3,\"end_line\":3,\"col\":0,\"end_col\":15},{\"frame_id\":2,\"path_str_id\":4,\"func_str_id\":3,\"line\":87,\"end_line\":87,\"col\":4,\"end_col\":27},{\"frame_id\":3,\"path_str_id\":4,\"func_str_id\":5,\"line\":196,\"end_line\":197,\"col\":11,\"end_col\":42}]}\n{\"type\":\"agg\",\"v\":1,\"run_id\":\"ab2e464d9d814af4b653302f03256520\",\"kind\":\"frame\",\"scope\":\"final\",\"samples_total\":105,\"entries\":[{\"frame_id\":1,\"self\":105,\"cumulative\":105},{\"frame_id\":2,\"self\":0,\"cumulative\":105},{\"frame_id\":3,\"self\":0,\"cumulative\":105}]}\n{\"type\":\"end\",\"v\":1,\"run_id\":\"ab2e464d9d814af4b653302f03256520\",\"samples_total\":105}\n```\n\nPlease use `jq .` to format. I omitted \"\\n\"s for brevity.\n\nThat's without full `meta`, without `raw`, `heartbeat`, `stats`, `error`, as well as without `seq` and timestamps, nor `thread_id`.\n\nWhat's the minimum viable format here? Perhaps it could be marked even as `\"v\":0` while it's polished?\n\n## Open Question\n\nThe format builds on the existing `profiling.sampling` internals.\n\nThere's a very interesting question what should be the first class objects / semantics of the format?\n\nMy honest feeling is that `frame_def` does not really describe frames but places in the code. pprof itself seems to operate more on `location_def` level.\n\nI don't know the previous conversations to make an informed decision here. `frame_def` is much more simpler.\n\nPerhaps there's a more complex discussion to be held? I'm open to any suggestions. \n\nRunning a much deeper comparison between various formats might be warranted.\n\n### Has this already been discussed elsewhere?\n\nhttps://github.com/python/cpython/issues/145464\n\n### Links to previous discussion of this feature:\n\n_No response_\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-146257\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/maurycy","@type":"Person","name":"maurycy"},"datePublished":"2026-03-21T15:57:27.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/146256/cpython/issues/146256"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:9863e7fe-cc65-972f-bdc0-dd5a50ec91b7 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8B3C:125C85:11A3C8:17A194:6A5182C7 |
| html-safe-nonce | 217eb0982d5f275d390ab152e480d143efe6b1809c9baf2c2413db166785cac4 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4QjNDOjEyNUM4NToxMUEzQzg6MTdBMTk0OjZBNTE4MkM3IiwidmlzaXRvcl9pZCI6IjM0MzQ0MjI4MzE0MDM4NjA2NzkiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 8dc5493444f8efe6c397bd4633b7c170041ceee159e59cedf0744834f4c6a1c5 |
| hovercard-subject-tag | issue:4112909088 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/146256/issue_layout |
| twitter:image | https://opengraph.githubassets.com/004de19fb2e5fda0e484e13e868d19b8a1bd12d9084cb3cc4897c0514c90fe14/python/cpython/issues/146256 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/004de19fb2e5fda0e484e13e868d19b8a1bd12d9084cb3cc4897c0514c90fe14/python/cpython/issues/146256 |
| og:image:alt | Feature or enhancement Proposal: I'm thinking how to make #145464 more managable, and I realized that sole --jsonl is actually a good first step. Adding --jsonl does not depend actually on streamin... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | maurycy |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | d01c62704ef24df49056c63892a149b775e1353d |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width