日々精進

新しく学んだことを書き留めていきます

concurrent.futuresで並列処理をすると、親プロセス終了時に「Error in atexit._run_exitfuncs OSError: handle is closed」エラー

原因は以下。

  • 子プロセスを管理しているオブジェクトはfull gcが実行されるまで生きている
  • 親プロセスが終了すると子プロセスを管理しているオブジェクトは子プロセスに停止命令を送る
  • その時には子プロセスはすでに終了しているので「handle is closed」が出る

不要なエラーメッセージが出るのは嫌だけど、それ以外の害は無いので一旦放置・・

参考: stackoverflow.com

以下を見るとpython3.9では直っているように見える。

bugs.python.org