python - Flask socketio blocked by something during time.sleep -


i'm running flask server on local machine , using pull data serial port , display in real time on webpage flask-socketio. followed example here , encountering interesting behavior. able replicate results of example, when alter background_thread function include reading , parsing data serial port, seems blocking socket sending data. code correctly establishes socket , opens connection, , can emit messages correctly @ beginning of thread function, once hits time.sleep(5), emitting doesn't work anymore. here's original thread function works (and includes time.sleep()!):

def background_thread(): """example of how send server generated events clients.""" count = 0 while true:     time.sleep(1)     count += 1     socketio.emit('my response',                   {'data': 'server generated event', 'count': count},                   namespace='/test') 

here's snip code. i'm using delay wait serial device finish operation before reading again.

socketio.emit('my response', {'data': 'waiting'}, namespace='/test')     print( "waiting...", file=sys.stderr)     time.sleep(5)     socketio.emit('my response', {'data': 'done sleeping'}, namespace='/test') 

in case, see "waiting" message, not "done sleeping" message or other messages after that. there no errors, code keeps running correctly. however, when hit ctrl+c kill script, messages tried emit after time.sleep() appear on browser side. it's blocking , buffering messages , dumping them when script killed. tried see if amount of time issue , tried this:

 socketio.emit('my response', {'data': 'waiting'}, namespace='/test')     print( "waiting...", file=sys.stderr)     socketio.emit('my response', {'data': 'about sleep'}, namespace='/test')     time.sleep(1)     socketio.emit('my response', {'data': 'sleep 1'}, namespace='/test')     time.sleep(1)     socketio.emit('my response', {'data': 'sleep 2'}, namespace='/test')     time.sleep(1)     socketio.emit('my response', {'data': 'sleep 3'}, namespace='/test')     time.sleep(1)     socketio.emit('my response', {'data': 'sleep 4'}, namespace='/test')     time.sleep(1)     socketio.emit('my response', {'data': 'done sleeping'}, namespace='/test') 

in case, saw "sleep 4" message, nothing after that. changing number of sleep statements resulted in not emitting after last sleep. add mystery, if remove sleep statements entirely, don't see emitted thread @ all.

i'm using version 1.4.5 of flask-socketio , eventlet async service. tried replacing time.sleep() eventlet.sleep(), saw same behavior.


Comments

Popular posts from this blog

authentication - Mongodb revoke acccess to connect test database -

r - Update two sets of radiobuttons reactively - shiny -

ios - Realm over CoreData should I use NSFetchedResultController or a Dictionary? -