This is a simple explanation of the asyncio
module and new supporting language
features in Python 3.5. Even though the new keywords async
and await
are new
language constructs, they are mostly1 useless without an event loop, and that
is supplied in the standard library as asyncio
. Also, you need awaitable
functions, which are only supplied by asyncio
(or in the growing set of async
libraries, like asyncssh
, quamash
etc.).
Favorite posts and series
C++ 11 14 17 20 23 • macOS (AS) / Windows Setup • Azure DevOps (Python Wheels) • Conda-Forge ROOT • CLI11 • GooFit • cibuildwheel • Hist • Python Bindings • Python 2→3 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 • SSH
My classes and books
Modern CMake • CompClass • se-for-sci
My workshops
CMake Workshop • Python CPU, GPU, Compiled minicourses • Level Up Your Python • Packaging
Python libraries
pybind11 (python_example, cmake_example, scikit_build_example) • cibuildwheel • build • packaging • pipx • dependency-groups • pyproject-metadata • nox • scikit-build (core, cmake, ninja, moderncmakedomain) • meson-python • boost-histogram • Hist • UHI • Vector • GooFit • Particle • DecayLanguage • Conda-Forge ROOT • uproot-browser • Scientific-Python/cookie • repo-review • validate-pyproject(-schema-store) • flake8-errmsg • check-sdist • pytest GHA annotate-failures • Plumbum
Other projects
CLI11 • beautifulhugo • Jekyll-Indico • POVM • hypernewsviewer • AoC 2023 • AoC 2024
My sites
Scientific-Python Development Guide • IRIS-HEP • Scikit-HEP • CLARIPHY
A little example of how asyncio works
This is a simple example to show how Asyncio works without using Asyncio itself, instead using a basic and poorly written event loop. This is only meant to give a flavor of what Asyncio does behind the curtains. I’m avoiding most details of the library design, like callbacks, just to keep this simple. Since this is written as an illustration, rather than real code, I’m going to dispense with trying to keep it 2.7 compatible.
[Read More]Feynman Diagrams in Tikz
There is a package for making Feynman diagrams in LaTeX. Unfortunately, it is
old and dvi
latex only. If you are using pdflatex or lualatex, as you should
be, it does not work. Even in regular LaTeX, it’s a bit of a pain. Why is there
not a new package for pdflatex? Turns out, you don’t need one. Due to the
powerful drawing library Tikz, you can create any diagram easily, and can
customize it completely. For example:

Including CRY cosmic ray generator in CMake
I realized that CRY did not have a CMake based install option, so including it in a GEANT4 cmake project might not be obvious. This is how you would do it in your CMakeLists.txt:
[Read More]GTest Submodule
Note: There is a better way to do this described here.
If you’ve ever tried apt-get
or brew
to try to install gtest, you are
probably familiar with the fact that gtest is not “recommend” for global install
on your system. As an alternative, the recommendation is that you make it part
of your project. The process for making gtest part of your project, however, is
not well documented, at least for modern git projects. What follows is the
procedure I used to do so.
Slots in Python
Slots seem to be poorly documented. What they do is simple, but whether they are used is tricky. This is a little mini-post on slots.
[Read More]