diff --git a/flask_server/load_generator.py b/flask_server/load_generator.py new file mode 100644 index 0000000000000000000000000000000000000000..972f5d623a407f45d939c4b6e92fa9fad23743e2 --- /dev/null +++ b/flask_server/load_generator.py @@ -0,0 +1,45 @@ + +import aiohttp +import asyncio + +import time + +url = "http://129.192.81.161:5000/" + +sleep_time = 0.25 +T_end = 10 + +async def send_request(session, count): + t_send = time.time() + async with session.post(url, json={'sleep-time':0.5}) as response: + data = await response.json() + t_resp = time.time() + print("{}, resp: {}, rt: {:10.4f}".format(count, \ + data['sleep-time-return'], t_resp - t_send)) + +async def main(loop): + async with aiohttp.ClientSession() as session: + tasks = set() + + t0 = time.time() + t_prev= t0 + + t = 0 + count = 0 + while t < T_end: + + dt = time.time() - t_prev + waittime = max(sleep_time - dt, 0) + + await asyncio.sleep(waittime) + t_prev = time.time() + + tasks.add(loop.create_task(send_request(session, count))) + count += 1 + t = time.time() - t0 + + await asyncio.wait(tasks) + +if __name__ == '__main__': + loop = asyncio.get_event_loop() + tasks = loop.run_until_complete(main(loop)) diff --git a/flask_server/requirements_loadgen.txt b/flask_server/requirements_loadgen.txt new file mode 100644 index 0000000000000000000000000000000000000000..47b7b339ec8e42fb86bde215d45eb7fb83ea71a3 --- /dev/null +++ b/flask_server/requirements_loadgen.txt @@ -0,0 +1,2 @@ +aiohttp==3.6.2 +asyncio==3.4.3 diff --git a/flask_server/requirements_server.txt b/flask_server/requirements_server.txt new file mode 100644 index 0000000000000000000000000000000000000000..8da51dadc5e3432af9b5dd4a8a9a31d68077e055 --- /dev/null +++ b/flask_server/requirements_server.txt @@ -0,0 +1,2 @@ +flask==1.1.2 +gunicorn==20.0.4 \ No newline at end of file diff --git a/flask_server/server.py b/flask_server/server.py new file mode 100644 index 0000000000000000000000000000000000000000..de12e6ae78aad4eea91df71dbcc9ef9d15129384 --- /dev/null +++ b/flask_server/server.py @@ -0,0 +1,26 @@ +# To start as an FCFS queue, use +# gunicorn --bind 0.0.0.0:5000 server:app --log-level info --workers 1 --worker-class sync +# +# For more gunicorn worker settings, see https://docs.gunicorn.org/en/latest/design.html + +import time +from flask import Flask, request + +app = Flask(__name__) + +@app.route('/', methods=['GET', 'POST']) +def main(): + if request.method == 'POST': + data = request.json + time.sleep(data['sleep-time']) + print(data['sleep-time']) + return {'sleep-time-return': 2*data['sleep-time']} + + return ''' + <!doctype html> + <title>A simple flask server</title> + <h1>A simple flask server</h1> + ''' + +if __name__ == "__main__": + app.run(host='0.0.0.0', port=5000) \ No newline at end of file