Skip to main content
replaced http://mathematica.stackexchange.com/ with https://mathematica.stackexchange.com/
Source Link

This questionThis question sounds like my question. However the consensus seems to be that trying to have Dynamic objects update in this fashion is a poor design. FrontEndDynamicExpression is mentioned, but it looks a little bit daunting.

This question sounds like my question. However the consensus seems to be that trying to have Dynamic objects update in this fashion is a poor design. FrontEndDynamicExpression is mentioned, but it looks a little bit daunting.

This question sounds like my question. However the consensus seems to be that trying to have Dynamic objects update in this fashion is a poor design. FrontEndDynamicExpression is mentioned, but it looks a little bit daunting.

Tweeted twitter.com/#!/StackMma/status/606017504964681728
added 39 characters in body; edited tags
Source Link
Kuba
  • 137.7k
  • 13
  • 289
  • 751

I am using DynamicDynamic and DynamicModuleDynamicModule to display graphics/statistics generated from a long-running set of parallel tasks. The data to display is passed from the workers to the main kernel via a SharedFunctionSharedFunction (which handles any of the concurrency issues), and then copied over from the SharedFunctionSharedFunction variable to a local (on the FrontEndFrontEnd, actually) variable that is then used to generate the graphics and statistics.

The copying from the SharedFunctionSharedFunction variable to the local/FE variable happens within the DynamicDynamic 'loop'.

The problem is that of course if the DynamicDynamic object moves off the screen, then all of the copying from the SharedFunctionSharedFunction variable to the local/FE variable stops. If I wait too long, then a whole lot of copying queues up, and when the Dynamic object regains visibility, the whole thing can hang while a lot of copying is being performed. I believe that the SharedFunctionSharedFunction variable then gets locked while all of the copying occurs, and then the workers also get blocked, waiting for their chance to update the SharedFunction variable. So my entire parallel calculation gets delayed, defeating the benefits of using parallel.

I have looked over the Advanced Dynamic FunctionalityAdvanced Dynamic Functionality section of the manual, and have seen the section concerning Refresh:

And I think I have read every(!) entry here on MMA.SE concerning Dynamic/DynamicModule/Dynamic/DynamicModuleand RefreshRefresh. However I am still pretty certain that there is no such thing as DynamicDynamic updates when the DynamicDynamic object is off the screen.

This question sounds like my question. However the consensus seems to be that trying to have DynamicDynamic objects update in this fashion is a poor design. FrontEndDynamicExpression is mentioned, but it looks a little bit daunting.

The only thing I can think of here is to try one of the ScheduledTasks functions. I have avoided this only because I have never used one any of these functions so far, and keep hoping that DynamicDynamic has some feature itself.

I think that my issue might be further aggravated by the fact that I am running my program on another machine via Remote Desktop, and I get the feeling that disconnecting the session - even though the Dynamic NB is still open and 'visible' - also triggers DynamicDynamic to take a break.

My question therefore is: Is there any way to force Dynamic/DynamicModuleDynamic/DynamicModule to update even when the DynamicDynamic object is not visible?

I am using Dynamic and DynamicModule to display graphics/statistics generated from a long-running set of parallel tasks. The data to display is passed from the workers to the main kernel via a SharedFunction (which handles any of the concurrency issues), and then copied over from the SharedFunction variable to a local (on the FrontEnd, actually) variable that is then used to generate the graphics and statistics.

The copying from the SharedFunction variable to the local/FE variable happens within the Dynamic 'loop'.

The problem is that of course if the Dynamic object moves off the screen, then all of the copying from the SharedFunction variable to the local/FE variable stops. If I wait too long, then a whole lot of copying queues up, and when the Dynamic object regains visibility, the whole thing can hang while a lot of copying is being performed. I believe that the SharedFunction variable then gets locked while all of the copying occurs, and then the workers also get blocked, waiting for their chance to update the SharedFunction variable. So my entire parallel calculation gets delayed, defeating the benefits of using parallel.

I have looked over the Advanced Dynamic Functionality section of the manual, and have seen the section concerning Refresh:

And I think I have read every(!) entry here on MMA.SE concerning Dynamic/DynamicModule/and Refresh. However I am still pretty certain that there is no such thing as Dynamic updates when the Dynamic object is off the screen.

This question sounds like my question. However the consensus seems to be that trying to have Dynamic objects update in this fashion is a poor design. FrontEndDynamicExpression is mentioned, but it looks a little bit daunting.

The only thing I can think of here is to try one of the ScheduledTasks functions. I have avoided this only because I have never used one any of these functions so far, and keep hoping that Dynamic has some feature itself.

I think that my issue might be further aggravated by the fact that I am running my program on another machine via Remote Desktop, and I get the feeling that disconnecting the session - even though the Dynamic NB is still open and 'visible' - also triggers Dynamic to take a break.

My question therefore is: Is there any way to force Dynamic/DynamicModule to update even when the Dynamic object is not visible?

I am using Dynamic and DynamicModule to display graphics/statistics generated from a long-running set of parallel tasks. The data to display is passed from the workers to the main kernel via a SharedFunction (which handles any of the concurrency issues), and then copied over from the SharedFunction variable to a local (on the FrontEnd, actually) variable that is then used to generate the graphics and statistics.

The copying from the SharedFunction variable to the local/FE variable happens within the Dynamic 'loop'.

The problem is that of course if the Dynamic object moves off the screen, then all of the copying from the SharedFunction variable to the local/FE variable stops. If I wait too long, then a whole lot of copying queues up, and when the Dynamic object regains visibility, the whole thing can hang while a lot of copying is being performed. I believe that the SharedFunction variable then gets locked while all of the copying occurs, and then the workers also get blocked, waiting for their chance to update the SharedFunction variable. So my entire parallel calculation gets delayed, defeating the benefits of using parallel.

I have looked over the Advanced Dynamic Functionality section of the manual, and have seen the section concerning Refresh:

And I think I have read every(!) entry here on MMA.SE concerning Dynamic/DynamicModuleand Refresh. However I am still pretty certain that there is no such thing as Dynamic updates when the Dynamic object is off the screen.

This question sounds like my question. However the consensus seems to be that trying to have Dynamic objects update in this fashion is a poor design. FrontEndDynamicExpression is mentioned, but it looks a little bit daunting.

The only thing I can think of here is to try one of the ScheduledTasks functions. I have avoided this only because I have never used one any of these functions so far, and keep hoping that Dynamic has some feature itself.

I think that my issue might be further aggravated by the fact that I am running my program on another machine via Remote Desktop, and I get the feeling that disconnecting the session - even though the Dynamic NB is still open and 'visible' - also triggers Dynamic to take a break.

My question therefore is: Is there any way to force Dynamic/DynamicModule to update even when the Dynamic object is not visible?

Source Link
berniethejet
  • 1.4k
  • 1
  • 12
  • 14

Is it possible to update Dynamic objects even when they are off screen?

I am using Dynamic and DynamicModule to display graphics/statistics generated from a long-running set of parallel tasks. The data to display is passed from the workers to the main kernel via a SharedFunction (which handles any of the concurrency issues), and then copied over from the SharedFunction variable to a local (on the FrontEnd, actually) variable that is then used to generate the graphics and statistics.

The copying from the SharedFunction variable to the local/FE variable happens within the Dynamic 'loop'.

The problem is that of course if the Dynamic object moves off the screen, then all of the copying from the SharedFunction variable to the local/FE variable stops. If I wait too long, then a whole lot of copying queues up, and when the Dynamic object regains visibility, the whole thing can hang while a lot of copying is being performed. I believe that the SharedFunction variable then gets locked while all of the copying occurs, and then the workers also get blocked, waiting for their chance to update the SharedFunction variable. So my entire parallel calculation gets delayed, defeating the benefits of using parallel.

Of course I introduced this two-stage mechanism - copying from the SharedFunction to the local/FE variable - in the hopes of avoiding this sort of issue as I know that some of my graphs take a long time to generate. I hoped to minimize the access to the SharedFunction variable, so I don't access it directly from the graphics routines. Nevertheless, like I say, the copying mechanism itself is also sufficiently costly as to now be its own bottleneck.

I have looked over the Advanced Dynamic Functionality section of the manual, and have seen the section concerning Refresh:

Refresh can also be used to cause updates at regular time intervals. It is important to understand that this is not a feature that should be used lightly. It is fundamental to the design of Dynamic that it does not need to update on any fixed schedule, because it simply always updates immediately whenever doing so would be useful. But there are some situations where this either cannot, or just unfortunately does not, happen.

But this only refers to the timing of updates, not how they are triggered.

And I think I have read every(!) entry here on MMA.SE concerning Dynamic/DynamicModule/and Refresh. However I am still pretty certain that there is no such thing as Dynamic updates when the Dynamic object is off the screen.

This question sounds like my question. However the consensus seems to be that trying to have Dynamic objects update in this fashion is a poor design. FrontEndDynamicExpression is mentioned, but it looks a little bit daunting.

As a simple example (nicked from somewhere here on MMA.SE) I have

DynamicModule[{showclock = True, ii = 0}, {Checkbox[Dynamic[showclock]], 
  Dynamic[If[showclock, Refresh[ii++, UpdateInterval -> 0.1], 
    ToString[ii] <> "-No count"]]}]

which illustrates that neither Refresh nor UpdateInterval are useful for what I want (the updating of ii is stopped when the object moves off the screen).

The only thing I can think of here is to try one of the ScheduledTasks functions. I have avoided this only because I have never used one any of these functions so far, and keep hoping that Dynamic has some feature itself.

I think that my issue might be further aggravated by the fact that I am running my program on another machine via Remote Desktop, and I get the feeling that disconnecting the session - even though the Dynamic NB is still open and 'visible' - also triggers Dynamic to take a break.

My question therefore is: Is there any way to force Dynamic/DynamicModule to update even when the Dynamic object is not visible?

I apologize of course for not offering any sort of minimal working example or useful code.

My version is MMA 9 and Windows 8.1.