I see my original message was held up in moderation due to the large attachment. I've
uploaded the image to File:Screenshot of viztracer output.png
<https://commons.wikimedia.org/wiki/File:Screenshot_of_viztracer_output.png>
On Jan 13, 2023, at 6:38 PM, Roy Smith
<roy(a)panix.com> wrote:
I just discovered viztracer.
https://viztracer.readthedocs.io/en/stable/index.html
<https://viztracer.readthedocs.io/en/stable/index.html>
I've been trying to figure out why my pywikibot app is so slow. It took me about 1
minute to instrument my code (see diff), I hit my URL in a browser, and loaded up the
resulting json file into visviewer. Now I'm scrolling around and drilling down into a
total execution trace of my code, although it really only took a moment to see that most
of the time is in 11 serialized API calls. This is easily the coolest performance
analysis tool I've ever used.
<Screen Shot 2023-01-13 at 6.32.31 PM.png>
diff --git a/dyk_web/core.py b/dyk_web/core.py
index 31758dc..1e58203 100644
--- a/dyk_web/core.py
+++ b/dyk_web/core.py
@@ -28,11 +28,16 @@ def get_pending_nominations():
return titles
+from viztracer import VizTracer
+from pathlib import Path
+
+
@bp.route("/display")
def display():
"""template_name query arg is the DYK nomination template, including
the Template: prefix."""
- current_app.logger.info <http://current_app.logger.info/>("Running on
%s", os.uname().nodename)
- page = Page(g.site <http://g.site/>, request.args["template_name"])
- nomination = Nomination(page)
- nomination_data = NominationData.from_nomination(nomination)
- return render_template("display.html", nomination=nomination_data)
+ with VizTracer(output_file=str(Path.home() / "viztracer.json")):
+ current_app.logger.info <http://current_app.logger.info/>("Running on
%s", os.uname().nodename)
+ page = Page(g.site <http://g.site/>,
request.args["template_name"])
+ nomination = Nomination(page)
+ nomination_data = NominationData.from_nomination(nomination)
+ return render_template("display.html", nomination=nomination_data)