Hope this helps, this question asked What is the fastest way to send 10000 http requests
I observed 15000 requests in 10s, using wireshark to trap on localhost and saved packets to CSV, only counted packets that had GET
in them.
FILE: a.py
from treq import get
from twisted.internet import reactor
def done(response):
if response.code == 200:
get("http://localhost:3000").addCallback(done)
get("http://localhost:3000").addCallback(done)
reactor.callLater(10, reactor.stop)
reactor.run()
Run test like this:
pip3 install treq
python3 a.py # code from above
Setup test website like this, mine was on port 3000
mkdir myapp
cd myapp
npm init
npm install express
node app.js
FILE: app.js
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Example app listening on port ${port}`)
})
OUTPUT
grep GET wireshark.csv | head
"5","0.000418","::1","::1","HTTP","139","GET / HTTP/1.1 "
"13","0.002334","::1","::1","HTTP","139","GET / HTTP/1.1 "
"17","0.003236","::1","::1","HTTP","139","GET / HTTP/1.1 "
"21","0.004018","::1","::1","HTTP","139","GET / HTTP/1.1 "
"25","0.004803","::1","::1","HTTP","139","GET / HTTP/1.1 "
grep GET wireshark.csv | tail
"62145","9.994184","::1","::1","HTTP","139","GET / HTTP/1.1 "
"62149","9.995102","::1","::1","HTTP","139","GET / HTTP/1.1 "
"62153","9.995860","::1","::1","HTTP","139","GET / HTTP/1.1 "
"62157","9.996616","::1","::1","HTTP","139","GET / HTTP/1.1 "
"62161","9.997307","::1","::1","HTTP","139","GET / HTTP/1.1 "
concurrent.futures.ThreadPoolExecutor
andconcurrent.futures.ProcessPoolExecutor
. They're easy to use and a good place to start with concurrency. Prefer threads over processes since this is an I/O-bound task but be aware that you'll probably need multiple processes running multiple threads to hit your throughput target. – VeracruzThreadPoolExecutor
and that has seemed to work. See my response. my target site is getting about 250/sec averaging 30Mbps. Is there a wat to fix the bottleneck via code so it may potentially go up to 500Mbps? – SimonsimonaThreadPoolExecutor
code. If you have 500/30 + 1 = 17.667 ~ 18 cores, and your network can handle the load, you could get close to 500Mbps. This is all back of the envelope calculations though, and not many folks have 18 cores to work with. Your best bet is to move this app into a cloud provider that can scale. – Veracruz