flask_socketioのWEBアプリコードを動かそうとしたら、動作開始前に撃沈したときのメモです。
※ 以下はVSCodeを使用している場合の対処方法です。
現象
エラー発生箇所:
socketio.run(app, debug=True, host='0.0.0.0', port=8080)
(諸事情によりデバッガの動きが怪しく、本当にここかは不明。)
エラーメッセージ:
greenlet.error: cannot switch to a different thread
対処方法
Stackoverflowを確認したところ、VSCodeを使用している場合はlaunch.jsonに"gevent":trueを追加すれば良さそう。
① [実行とデバッグ]のアイコンをクリックし、「launch.jsonファイルを作成します」を押す。
もし[実行とデバッグ]のアイコンを押しても↑この画面ではない場合、既に存在していると思われるので、エクスプローラの.vscode下を見てみてください:
再度実行してみた
別のエラーが出た。
エラーメッセージ:
ModuleNotFoundError: No module named 'gevent'
(メッセージ画面)
既にgeventを持っている人は出ないエラーなのだろう。
何はともあれ、geventが無いようなのでpip installし、再々度実行。
起動したっぽいので、ブラウザからlocalhost:8080にアクセスしたところ、無事表示ができました。
新たな疑問
もしかしてgeventが無いことが問題だったのか?launch.jsonの変更は本当に必要だったのか?という疑問が・・・
ということで、再度launch.jsonのgeventの設定をコメントアウトして実行してみました。
疑ってスミマセンでした。
結論
「greenlet.error: cannot switch to a different thread」が出たときは、launch.jsonの設定で「"gevent":true」を追加する必要がある。