IMO you should place all requests within a single ClientSession().<p>This will provide two benefits:<p>1. You won&#x27;t need to use a semaphore. To limit connections you will need to create a TCPConnection() object with limit set to the limit you used in the semaphore and pass it to the ClientSession() and aiohttp will not make more connections than the limit set (default behavior is to have unlimited number of connections).<p>2. With single ClientSession(), aiohttp will make use of keep-alive (i.e. it will reuse same connections for next requests, but it will keep at most the limit of connections you set in TCPConnection() object).<p>This should improve performance further, and (given sane limit) it&#x27;ll also solve issue with &quot;Cannot assign requested address&quot; error.<p>BTW: Even without limit set aiohttp will try to reduce number of connections open so it might still fix the connection error issue as long as individual requests don&#x27;t take long. It&#x27;s still good idea to set limit, just to be nice to the remote server.