Title: [Bug]: macosx timers don't fire if plt.show() hasn't been called · Issue #23061 · matplotlib/matplotlib · GitHub
Open Graph Title: [Bug]: macosx timers don't fire if plt.show() hasn't been called · Issue #23061 · matplotlib/matplotlib
X Title: [Bug]: macosx timers don't fire if plt.show() hasn't been called · Issue #23061 · matplotlib/matplotlib
Description: Bug summary There are no leaks when we plt.show() figures and fire up the GUI mainloop. However, when we are calling savefig() without ever showing we are now creating singleshot Timers in the app, but the callback never gets triggered d...
Open Graph Description: Bug summary There are no leaks when we plt.show() figures and fire up the GUI mainloop. However, when we are calling savefig() without ever showing we are now creating singleshot Timers in the app,...
X Description: Bug summary There are no leaks when we plt.show() figures and fire up the GUI mainloop. However, when we are calling savefig() without ever showing we are now creating singleshot Timers in the app,...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/23061
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"[Bug]: macosx timers don't fire if plt.show() hasn't been called","articleBody":"### Bug summary\n\nThere are no leaks when we plt.show() figures and fire up the GUI mainloop. However, when we are calling savefig() without ever showing we are now creating singleshot Timers in the app, but the callback never gets triggered due to the event loop not being active/listening for these timers. This is then keeping a reference from the Timer to the Figure on every close, causing a leak when calling a bunch of savefig's.\r\n\r\nxref: https://github.com/matplotlib/matplotlib/issues/19769\r\nBut, more specifically related to Timer's generically not firing.\r\nidentified debugging: #23059\n\n### Code for reproduction\n\n```python\nimport sys\r\nimport matplotlib.pyplot as plt\r\nimport numpy as np\r\n\r\nimport matplotlib\r\n#matplotlib.use('agg')\r\n\r\ndata = np.random.rand(60, 60)\r\n\r\ndef plot_expr(plot_name):\r\n\r\n plt.figure(figsize=(9, 8))\r\n\r\n for i in range(60):\r\n plt.plot(data[i, :])\r\n\r\n plt.savefig(plot_name)\r\n\r\n plt.close('all')\r\n\r\n\r\nif __name__ == \"__main__\":\r\n\r\n print(f'python: {sys.version}')\r\n print(f'matplotlib: {matplotlib.__version__}')\r\n print(f'backend: {matplotlib.get_backend()}')\r\n\r\n for i in range(50):\r\n print(f'{i}...')\r\n plot_expr(f'leak_{i}')\n```\n\n\n### Actual outcome\n\nTimer's don't fire. You can put a log inside the callback to verify `NSLog(@\"Inside callback\")` that the Timer gets created but doesn't trigger.\n\n### Expected outcome\n\nTimer's should fire even if we aren't interactive.\n\n### Additional information\n\n_No response_\n\n### Operating system\n\nMacOS\n\n### Matplotlib Version\n\nmain\n\n### Matplotlib Backend\n\nmacosx\n\n### Python version\n\n_No response_\n\n### Jupyter version\n\n_No response_\n\n### Installation\n\n_No response_","author":{"url":"https://github.com/greglucas","@type":"Person","name":"greglucas"},"datePublished":"2022-05-18T01:49:36.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/23061/matplotlib/issues/23061"}
| 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:35cebefd-3b13-ea5e-a690-a89d40412aa4 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B014:F83CB:3F2AA9:54209D:6A517E5B |
| html-safe-nonce | f51350bbd92d5d98fe1eca23274d331e29fd41afcb5459b17530dda61e14f352 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMDE0OkY4M0NCOjNGMkFBOTo1NDIwOUQ6NkE1MTdFNUIiLCJ2aXNpdG9yX2lkIjoiMjg2MDAwNzAxNjEwOTI3Njc2MyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 99e82b73d72c8f7efe9f9fd4cbe332f9889a4e4f7f43dd968c4beb43a6b808ce |
| hovercard-subject-tag | issue:1239331276 |
| 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/matplotlib/matplotlib/23061/issue_layout |
| twitter:image | https://opengraph.githubassets.com/11de0cd5b48f19c6cb3cd17dc20da384a05d6b984fdf35e683146983a1d194b6/matplotlib/matplotlib/issues/23061 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/11de0cd5b48f19c6cb3cd17dc20da384a05d6b984fdf35e683146983a1d194b6/matplotlib/matplotlib/issues/23061 |
| og:image:alt | Bug summary There are no leaks when we plt.show() figures and fire up the GUI mainloop. However, when we are calling savefig() without ever showing we are now creating singleshot Timers in the app,... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | greglucas |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git |
| octolytics-dimension-user_id | 215947 |
| octolytics-dimension-user_login | matplotlib |
| octolytics-dimension-repository_id | 1385122 |
| octolytics-dimension-repository_nwo | matplotlib/matplotlib |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1385122 |
| octolytics-dimension-repository_network_root_nwo | matplotlib/matplotlib |
| 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