0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

greenlet.error: cannot switch to a different threadが出たときの対処方法

Posted at

flask_socketioのWEBアプリコードを動かそうとしたら、動作開始前に撃沈したときのメモです。

※ 以下はVSCodeを使用している場合の対処方法です。

現象

エラー発生箇所:
 socketio.run(app, debug=True, host='0.0.0.0', port=8080)
 (諸事情によりデバッガの動きが怪しく、本当にここかは不明。)

エラーメッセージ:
 greenlet.error: cannot switch to a different thread

(メッセージ画面)
image.png

対処方法

Stackoverflowを確認したところ、VSCodeを使用している場合はlaunch.jsonに"gevent":trueを追加すれば良さそう。

① [実行とデバッグ]のアイコンをクリックし、「launch.jsonファイルを作成します」を押す。
image.png

もし[実行とデバッグ]のアイコンを押しても↑この画面ではない場合、既に存在していると思われるので、エクスプローラの.vscode下を見てみてください:
image.png

② "gevent":trueを追加
image.png

再度実行してみた

別のエラーが出た。

エラーメッセージ:
 ModuleNotFoundError: No module named 'gevent'
(メッセージ画面)
image.png

既にgeventを持っている人は出ないエラーなのだろう。
何はともあれ、geventが無いようなのでpip installし、再々度実行。
image.png

起動したっぽいので、ブラウザからlocalhost:8080にアクセスしたところ、無事表示ができました。

新たな疑問

もしかしてgeventが無いことが問題だったのか?launch.jsonの変更は本当に必要だったのか?という疑問が・・・

ということで、再度launch.jsonのgeventの設定をコメントアウトして実行してみました。
image.png

やはり冒頭のエラーになりました。
image.png

疑ってスミマセンでした。

結論

「greenlet.error: cannot switch to a different thread」が出たときは、launch.jsonの設定で「"gevent":true」を追加する必要がある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?