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 PyQt6 Concurrency

PyQt6 Concurrency

Using QProcess to Run External Programs in PyQt6

Run background programs 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

Multithreading PyQt6 applications with QThreadPool

Run background tasks concurrently without impacting your UI

Passing Arguments to Threaded Functions in PyQt6

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

Using concurrent.futures with PyQt6 for Long-Running Tasks

Keep your GUI responsive while fetching data from multiple APIs using Python's concurrent.futures