Trusted answers to developer questions
Trusted Answers to Developer Questions

Related Tags

python
asynchronous
context manager
async

What is the asynchronous context manager in Python?

Educative Answers Team

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

The operation of an async context manager depends on the method calls and can be implemented to create coroutines in a program. These coroutines are extremely helpful when working with repetitive tasks that require resources to be well defined within a scope.

One key thing to remember is that not all context managers must be async ones. Async context managers should only be there if you want to await inside the enter and exit blocks.

widget

To make use of the async context manager, prepend the keyword async behind the target function.

The example below shows how to make the connection function asynchronous.

async with Connection('localhost', 500) as conn:

When using the async context manager, the following functions should be used:

  • _aenter_() function in place of _enter_().
  • _aexit_() function in place of _exit_() function. The parameters for _aexit_() are exactly similar to _exit_().

Both of these functions should be defined using the async def method.

Code

The following code gives the complete implementation of the async method to set up a connection.

class Connection:
def _init_(self, host, port): #initializing the object
self.host = host
self.port = port
async def _aenter_(): #setting up a connection
self.conn = await get_conn(self.host, self.port)
return conn
async def _aexit_(self, exc_type, exc, tb): #closing the connection
await self.conn.close()
async with Connection('localhost', 500) as conn:
# addfunctionality here
  • Define the class connection and set the overloaded constructor. This can be used to set attributes when declaring an object.
  • Define the _aenter()_ function within the class. This function is used to set up the connection.
  • Define the _aexit()_ function. This function is called when tearing down the connection.
  • Make an object of the connection class and start implementing the functionalities.

The above functionality can be implemented using the contextlib library as well.

RELATED TAGS

python
asynchronous
context manager
async
Copyright ©2022 Educative, Inc. All rights reserved

Grokking Modern System Design Interview for Engineers & Managers

Ace your System Design Interview and take your career to the next level. Learn to handle the design of applications like Netflix, Quora, Facebook, Uber, and many more in a 45-min interview. Learn the RESHADED framework for architecting web-scale applications by determining requirements, constraints, and assumptions before diving into a step-by-step design process.

Keep Exploring