I discovered that it matters a lot which block you cache. You have to cache the long running block. I had put cache on the block with noweb expansion, and then the long running block still runs every time. That was a surprise to me, since nothing was changing in that block, so I thought it would just use the cached result.
Greg Minshall <minsh...@umich.edu> writes: > John, > >> I tried this but it did not work for me. > > to be clear, caching means that the *first* time you execute, your > reference will have to wait for the long-running computation to > complete, but not during subsequent executions (unless the source block > that performs the execution changes, in which case the reference will > again have to wait). > > also, caching means that, after the first execution (ditto caveat) the > source block *will no longer run*. so, if there were any (other) side > effects of running that source block, they will not happen. (you could > possibly split the side effect-producing code out of that block.) > > i'm not sure if this explains what did not work for you. > > cheers, Greg > >> >> >> On Wed, Jan 27, 2021 at 5:38 PM <to...@tuxteam.de> wrote: >> >> > On Wed, Jan 27, 2021 at 05:14:43PM -0500, doltes wrote: >> > > Get =#+RESULTS= without re-evaluating source code block? >> > > >> > > Let's suppose I have a code block which requires a long time to finish >> > > >> > > #+NAME: big-computation >> > > #+begin_src bash >> > > sleep 5 # Some computation which requires a long time to complete. >> > > echo a >> > > #+end_src >> > > >> > > #+RESULTS: big-computation >> > > #+begin_example >> > > a >> > > #+end_example >> > > >> > > I want to use the results of that code block in other code blocks so I >> > > use a =noweb= reference (see below.) >> > > >> > > #+begin_src bash :noweb yes >> > > printf "%s\n" <<big-computation()>> >> > > #+end_src >> > > >> > > #+RESULTS: >> > > #+begin_example >> > > a >> > > >> > > #+end_example >> > > >> > > However, doing this (i.e. using a =noweb= reference) would make the >> > > command to be evaluated whenever getting its results. I don't want >> > > this, I want the =:noweb= reference to actually use the already >> > > computed results. >> > > >> > > So, my question is: Is it possible to use the actual =#+RESULTS= code >> > > block instead of always evaluating it when referencing the results >> > > through a =:noweb= reference? >> > >> > Perhaps "Cache results of evaluation" (15.5 Evaluating Code Blocks, >> > in the Interwebs here [1] is for you. >> > >> > In short, add a header argument :cache yes to your code block. >> > >> > Cheers >> > >> > [1] https://orgmode.org/org.html#Evaluating-Code-Blocks >> > >> > - t >> > >> -- >> John >> >> ----------------------------------- >> Professor John Kitchin >> Doherty Hall A207F >> Department of Chemical Engineering >> Carnegie Mellon University >> Pittsburgh, PA 15213 >> 412-268-7803 >> @johnkitchin >> http://kitchingroup.cheme.cmu.edu -- Professor John Kitchin Doherty Hall A207F Department of Chemical Engineering Carnegie Mellon University Pittsburgh, PA 15213 412-268-7803 @johnkitchin http://kitchingroup.cheme.cmu.edu