Building real applications, you'll find yourself wanting to perform long-running tasks. For example, your application might need to interact with remote APIs or perform complex calculations.

But you'll notice a problem: while the long-running task completes, your app will become unresponsive. Your code blocks Qt from running until it returns.

In these tutorials we'll discover how to use threads & processes to long-running tasks while keeping your app responsive.

Explore PySide6 Concurrency

PySide6 Concurrency

Multithreading PySide6 applications with QThreadPool

Run background tasks concurrently without impacting your UI

Waiting for Multiple Threads to Complete Before Starting Another in Qt

How to coordinate dependent background tasks using QThreadPool and signals

Passing Arguments to Threaded Functions in PyQt6

Understanding the difference between passing a function and calling a function when using QThreadPool and QRunnable

Fixing Crashes When Using NumPy Arrays with QImage in Qt Threads

How to safely pass image data between threads when streaming video or updating displays