Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python, threading, and requests: What happens when I make concurrent requests in one session?

Let's say I make 5 requests via a requests.Session to a server, using a ThreadPoolExecutor:

session = requests.Session()
executor = concurrent.futures.ThreadPoolExecutor(max_workers=5)

def post(data):
    response = mysession.post('http://example.com/api/endpoint1', data)
    return response

for data in (data1, data2, data3, data4, data5):
    executor.submit(post, data)

Since we are using the same requests.Session for each request, do we have to wait for the server to acknowledge the first request before we can send the next one?

If I had 5 sessions open concurrently -- one session per thread -- would I be able to send the requests more rapidly by sending each request via its own session?

The maintainer already recommends "one session per thread" so it's certainly doable... but will it improve performance?

Would I be better off using aiohttp and async?

like image 293
right2clicky Avatar asked Oct 21 '25 15:10

right2clicky


1 Answers

So, first of all if you are not sure whether certain object/function is thread safe you should assume that it is not. Therefore you should not use Session objects in multiple threads without appropriate locking.

As for performance: always measure. Many libraries tend to do lots of stuff under the hood, including opening multiple TCP connections. They can probably be configured to tune performance, so its very hard to answer the question precisely. Especially since we don't know your case. For example if you intend to make 5 parallel requests, then simply run 5 threads with 5 session objects. Most likely you won't see a diffrence between libs (unless you pick a really bad one). On the other hand if you are looking at hundreds or thousands concurrent requests it will matter.

Anyway: always measure it yourself.

like image 125
freakish Avatar answered Oct 23 '25 03:10

freakish



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!