Closed arebrik closed 1 year ago
Hello!
This method not well documented, but it looks like must return same value as we can get from stats server -> "listen_queue" key.
But in my example it always return 0. I write simple client/server to reproduce this behaviour.
server.py:
import uwsgi import time from threading import Thread import socket import json monitor = None def application(env, start_response): global monitor if monitor is None: enable_monitor() time.sleep(10) start_response('200 OK', [('Content-Type','text/html')]) return ['resp'.encode()] def enable_monitor(): def _monitor(): while 1: api_size = uwsgi.listen_queue() stats_size = get_queue_via_stats('127.0.0.1', 1718) print(f'queue size: stats-{stats_size}, api-{api_size}') time.sleep(2) global monitor monitor = Thread(target=_monitor) monitor.run() def get_queue_via_stats(hostname, port): s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((hostname, port)) s.shutdown(socket.SHUT_WR) result = b'' while 1: data = s.recv(1024) if len(data) == 0: break result += data s.close() return json.loads(result.decode()).get('listen_queue', 0)
client.py:
import aiohttp import asyncio HOST = '127.0.0.1' PORT = 9091 async def worker(session): async with session.get(f'http://{HOST}:{PORT}') as resp: await resp.text() async def main(): async with aiohttp.ClientSession() as session: await asyncio.wait(list( asyncio.create_task(worker(session)) for _ in range(100))) asyncio.run(main())
run server: uwsgi --wsgi-file server.py --stats 0.0.0.0:1718 --http :9091 --master --processes 2 in separate terminal run client: python client.py
uwsgi --wsgi-file server.py --stats 0.0.0.0:1718 --http :9091 --master --processes 2
python client.py
print from server:
queue size: stats-0, api-0 queue size: stats-0, api-0 queue size: stats-98, api-0 queue size: stats-98, api-0 queue size: stats-98, api-0 queue size: stats-98, api-0
python version: 3.7.4 uwsgi version: 2.0.17.1 os: running in docker under ubuntu 18
I don't think your question has anything to do with waitress. Closing as irrelevant to waitress.
Hello!
This method not well documented, but it looks like must return same value as we can get from stats server -> "listen_queue" key.
But in my example it always return 0. I write simple client/server to reproduce this behaviour.
server.py:
client.py:
run server:
uwsgi --wsgi-file server.py --stats 0.0.0.0:1718 --http :9091 --master --processes 2
in separate terminal run client:python client.py
print from server:
python version: 3.7.4 uwsgi version: 2.0.17.1 os: running in docker under ubuntu 18