-
-
Notifications
You must be signed in to change notification settings - Fork 2.1k
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
[BUG] callbacks called in wrong order / too often #832
Comments
Thanks @maartenbreddels - I'll have to dive into your code in detail to figure out exactly what's going on. In general we do try to avoid calling a callback if it's just going to get called again after another callback returns, but perhaps you're hitting a case of this that we missed. |
I think I've hit this same problem. I have drop down which updates 2 separate components and they both feed into a 3rd. It is in the office and cant really take it out. What was the results of the analysis for this issue? |
Alright, took a while but I believe the reworked callback dispatch framework in #1103 resolves this issue. I'm not planning to include a specific test for this case as it's most likely covered by at least one of the tests for #1053, #1071, #1084 and #1105 🙄 but when I run your code from maartenbreddels/dash-taxi-example#2 off the |
Really happy to see this fixed! Hope we can try it out soon. |
…ash-4.17.19 Bump lodash from 4.17.11 to 4.17.19
…17.19 Bump lodash from 4.17.11 to 4.17.19
Hi plotly/dash people,
Great project, nicely designed.
Versions
Describe the bug
I created this demo of dash + vaex to interactively explore large datasets (150 million rows in this case):
https://github.com/maartenbreddels/dash-taxi-example
Talking to @alexcjohnson at glue-con, he suggested I use the Store, to avoid doing calculations when for instance I change between linear to log.
This seems to expose a bug, that I tried to isolate, but that didn't make it easier to digest.
I opened a PR here for that: maartenbreddels/dash-taxi-example#2, which exposes the bug that I will try to describe.
This dash app shows a heatmap on the left containing the number of taxi trips. On the right, it shows the taxi trips per hour for the zoomed-in region and the total dataset:
Optionally, one can filter the month (not relevant now). When zooming in the heatmap, it should trigger a computation to update the heatmap and barchart.
Expected behavior
When I zoom in:
update_limits
callback should be called, which outputs to thelimits
store.update_data
should now be called since it depends onlimits
, and it outputs to thedata-heatmap
store.update_figure_2d
should be called afterupdate_data
, since it depends on thelimits
anddata-heatmap
store.update_figure_bar
should be called as well (not relevant for the discussion).Observed behaviour
Instead, what I see is that
update_figure_2d
is called before and afterupdata_data
, as shown in the terminal output:This leads to a very bad user experience, as shown in this screen capture:
What happens in the screencapture is:
update_limits
callback.update_figure_2d
(the one that shouldn't be triggered, only after update_data), which will update the figure, but with the new limits, and the old data. This is seen as the original heatmap, but shown at the zoomed in region.update_data
, followed by the secondupdate_figure_2d
is triggered, and the correct heatmap is shown.This to me seems like a bug.
My workaround is to put all dependencies of
update_figure_2d
in the Store (as a list or dict), but this seems to go against the design of dash.Regards,
Maarten Breddels
The text was updated successfully, but these errors were encountered: