2

Is there an easy way to time how long it takes to execute source code blocks in org-mode (maybe with header arguments or similar), if so, how? Or do I have to implement it in the code itself?

I'm using python3 btw.

2 Answers2

1

This can be handled by advising the code that handles source code block execution in Org Mode. The function in question is org-babel-execute-src-block - it runs a hook after it executes, but not before, so the advice feature is required - and probably preferred for this use.


(defun gjg/time-call (time-call &rest args)
  (message "Ohai %s" args)
  (let ((start-time (float-time)))
    (apply time-call args)
    (message "Function call took %f seconds" (- (float-time) start-time)))
  )

(advice-add 'org-babel-execute-src-block :around #'gjg/time-call)

You will now get a message with the elapsed time for the code block execution printed in the *Messages* buffer.

To remove the advice, execute

(advice-remove 'org-babel-execute-src-block #'gjg/time-call)
gregoryg
  • 915
  • 6
  • 8
1

There is a mistake: the result of function "time-call" must be passed forward.

(defun gjg/time-call (time-call &rest args)
  (message "Ohai %s" args)
  (let ((start-time (float-time))
        (result (apply time-call args)))
    (message "Function call took %f seconds" (- (float-time) start-time))
    result))

(advice-add 'org-babel-execute-src-block :around #'gjg/time-call)
Vaddson
  • 11
  • 1