Trio has convenient sub-modules for working with blocking functions: trio.to_thread and trio.from_thread, but working with threads is quite low-level (i.e. error-prone) and thus discouraged, unless absolutely necessary.