FlaskのIOError - Broken pipeにどう対処すれば良いか?

結論から言いますと

app.run()の引数にthreaded=Trueを加えること.

以下は蛇足.

概要

最近,以下のような構成で趣味のアプリを書いていたのだけど.頻繁にIOError: [Errno 32] Broken pipeが出て困っていた.

f:id:h_nitoliam:20161105174838p:plain

具体的には,どちらかの更新がキッカケになって止まる感じ.

参考にしたページ

エラー名で調べると,以下のページが見つかった.

stackoverflow.com

stackoverflow.com

Flaskの提供しているWSGI互換のサーバは,標準でシングルスレッドで動くらしく,複数の処理が投げられるとIOErrorを起こすらしい. なので,threadedオプションをTrueに設定して,複数スレッドでの動作を許可してやればいいとのこと.

ただ,全て問題解決かと言うとそういうわけではなくて,「Flaskに入っているサーバ機能を使うのは開発のときだけにしろ」とのことだった. プロダクション環境に入れるときは,gunicornのような別のWSGI互換サーバを使うべきらしい.

なるほどですね.