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
Post a Comment