flask socketio - сервер не перезагружается и не обновляется

Я пытаюсь использовать flask-socketio. Я запустил простой пример из документации, и он работал нормально. Я использую виртуальную среду

app.py

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@socketio.on('message')
def handle_message(message):
    print('received message: ' + message)

if __name__ == '__main__':
    socketio.run(app, port=8000)

а в demo.py использую клиентскую библиотеку socketio

демо.py

from socketIO_client import SocketIO, LoggingNamespace

def on_message_response(*args):
    print('on_message_response', args)

with SocketIO('localhost', 8000, LoggingNamespace) as socketIO:
    socketIO.emit('message', 'xxx', on_message_response)
    socketIO.wait_for_callbacks(seconds=1)

Я установил eventlet, и этот базовый пример работал нормально. Когда я запустил, я получил вывод
received message: xxx

Однако, когда я обновил файл app.py и demo.py до этого

app.py

from flask import Flask, render_template
from flask_socketio import SocketIO

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)

@socketio.on('message')
def handle_message(name, age):
    print('We Welcome {} who is {} years old'.format(name,age))

if __name__ == '__main__':
    socketio.run(app, port=8000)

демо.py

from socketIO_client import SocketIO, LoggingNamespace

def on_message_response(*args):
   print('on_message_response', args)


with SocketIO('localhost', 8000, LoggingNamespace) as socketIO:
    socketIO.emit('message', {'name':'Dipanshu', 'age':25}, on_message_response)
    socketIO.wait_for_callbacks(seconds=1)

Не похоже, что app.py перезагружается или обновляется, потому что я продолжаю получать это

Файл "app.py", строка 10, в handle_message print('получено сообщение:' + сообщение) TypeError: должно быть str, а не dict

Я перезапускал app.py несколько раз, но получаю ту же ошибку. Я также попытался удалить eventlet и запустить его с помощью сервера Flask, как и другие приложения Flask, но все было по-прежнему.


person Dipanshu Juneja    schedule 06.01.2018    source источник
comment
Вы удалили свою старую функцию def handle_message(message)?   -  person dvnguyen    schedule 06.01.2018
comment
Я обновил handle_message с помощью указанной ниже функции, так что да.   -  person Dipanshu Juneja    schedule 06.01.2018
comment
Это странно. Можете ли вы опубликовать весь контент app.py?   -  person dvnguyen    schedule 06.01.2018
comment
Я только что добавил это. Спасибо!   -  person Dipanshu Juneja    schedule 06.01.2018
comment
Ваш код выглядит хорошо для меня. Есть ли шанс, что новый код не был сохранен на диск? Вы можете проверить его, запустив cat app.py, чтобы проверить его содержимое.   -  person dvnguyen    schedule 06.01.2018
comment
Я использую Windows, поэтому не могу запустить cat. Но я не понимаю, как это было бы возможно, потому что я, очевидно, сохранил файл, как и любой другой файл. Хотя я сомневаюсь, но может ли он что-то сделать со мной, используя виртуальную среду?   -  person Dipanshu Juneja    schedule 06.01.2018
comment
Ты был прав. Похоже, что содержимое на самом деле не сохраняется на диске, я вышел из виртуальной среды и открыл файл в другом текстовом редакторе, и он не отображал обновленное содержимое.   -  person Dipanshu Juneja    schedule 07.01.2018
comment
Давайте продолжим это обсуждение в чате.   -  person Dipanshu Juneja    schedule 07.01.2018


Ответы (1)


Это может быть проблемой с скомпилированными файлами Python. Я собираюсь дать вам пару идей, чтобы попробовать:

  • Мое первое предложение — удалить все *.pyc файлы и __pycache__ каталоги, которые есть в вашем основном каталоге приложения или в любых подкаталогах. Это удалит все скомпилированные файлы Python и заставит Python все перекомпилировать.

  • Кроме того, вы также можете взять два исходных файла и переместить их в новый каталог, а затем запустить сервер и клиент из нового каталога. Это также должно устранить любые проблемы, связанные с кэшированием скомпилированных файлов Python.

Надеюсь это поможет!

person Miguel    schedule 07.01.2018