The only WSGI servers where this would work is those which are implemented 
using greenlets. Thus, eventlet and gevent modes of gunicorn. Any WSGI server 
which uses normal processes/threads, SSE will not really work well because of 
restrictions on size of workers available.

> On 5 Aug 2019, at 10:05 pm, Orestis Zambounis <orestis.zambou...@gmail.com> 
> wrote:
> 
> My flask application implements SSE to push updates to each of my users. I.e. 
> each of my users gets individual updates and therefore unique SSE 
> connections. I deploy the application to mod_wsgi. Now mod_wsgi allows me to 
> use a fixed number of threads (default 15) which are quickly all blocked when 
> the number of users grows. This happens as the SSE connection are kept open 
> and are therefore blocking the thread. Subsequent requests can't get in 
> anymore and I get a Script timed out before returning headers: wsgi.pyerror.
> 
> My current workaround is to put a timer in my SSE generator and break it 
> after a certain threshold. Still, with many users a fixed number of threads 
> will still lead to blocked requests.
> 
> def stream():
>    ...
>    queue = memory.get(...) 
>    @stream_with_context
>    def eventStream():
>        try:
>            start = time.time()
>            while True:
>                delta = start - time.time()
>                if delta > app.config["SSE_TIMEOUT"]:
>                    break
>               # wait for source data to be available, then push it
>               try:
>                   entry = queue.get( True, timeout=app.config["SSE_TIMEOUT"] 
> - delta)
>               except Empty:
>                   break
>               ev = ServerSentEvent(json.dumps(entry)) 
>               yield ev.encode()
>        finally:
>            ...
>    return Response(eventStream(), mimetype="text/event-stream")
> 
> I'd like top find a clean solution to be able to handle an arbitrary amount 
> of users which are able to receive updates through SSE without blocking all 
> threads in wsgi.
> 
> 
> I posted the issue also on stackoverflow: 
> https://stackoverflow.com/questions/57345375/server-sent-events-sse-blocking-threads-in-mod-wsgi
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "modwsgi" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to modwsgi+unsubscr...@googlegroups.com.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/modwsgi/7528d624-f52b-4520-8509-0db74d31a2cd%40googlegroups.com.

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to modwsgi+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/modwsgi/3F2BD34D-94ED-4348-A15E-5FD2CCF492C7%40gmail.com.

Reply via email to