Background Tasks in FastAPI

Sandesh Thakar
2 min readJan 29, 2023

--

In this article, we will explore the background tasks feature of FastAPI and how it can be used to run tasks concurrently, preventing them from blocking the main thread and slowing down the application.

When a user makes a request to a web application, the application needs to process the request and return a response. This process can take some time, especially if the application needs to perform a complex operation or call an external service. If the application blocks the main thread while performing this operation, it will not be able to handle other requests until the operation is completed. This can lead to poor performance and slow response times.

To solve this problem, web frameworks provide a way to run tasks in the background, allowing the main thread to continue handling other requests. This is where background tasks come in. In FastAPI, background tasks are implemented using the BackgroundTasks class. This class allows you to queue tasks to be executed in the background, and it will take care of running them concurrently, so they do not block the main thread.

To use the BackgroundTasks class, you need to first import it from the fastapi module. Then, you can create an instance of the class and use the add_task method to queue a task. The add_task method takes a callable, such as a function, and any arguments that need to be passed to the function. Here is an example of how to use the BackgroundTasks class:

from fastapi import FastAPI, BackgroundTasks

app = FastAPI()

@app.post("/items/{item_id}")
async def create_item(item_id: int, background_tasks: BackgroundTasks):
background_tasks.add_task(send_confirmation_email, item_id)
return {"item_id": item_id}

def send_confirmation_email(item_id: int):
print(f"Sending confirmation email for item {item_id}")

In this example, the create_item function is handling a POST request to create a new item. After the item is created, the function queues a task to send a confirmation email to the user. The send_confirmation_email function is a simple function that takes the item ID as an argument and prints a message. In a real-world application, this function would perform the actual task of sending the email.

It’s worth noting that the BackgroundTasks class is not thread-safe.

Another way to use background tasks is by using background thread or background process, with help of libraries like concurrent.futures or multiprocessing. The advantage of this approach is that it allows you to use the full power of your CPU, by using all the cores.

In conclusion, the BackgroundTasks feature of FastAPI allows you to run tasks concurrently, preventing them from blocking the main thread and slowing down the application. By using background tasks, you can improve the performance of your application.

--

--