複数のサブプロセスを開こうとしています - それぞれ同じプリコンパイル済みバイナリを実行していますが、 subprocess32.Popen()を使ってPython(2.7)の下で実行します。ほとんどの場合、正常に動作しますが、OSError [Errno 14] Bad Addressが頻繁に発生します。ここでは、コードは:Popen()でサブプロセスを確実に開くことができません - OSError [Errno 14] Bad Address
self.gld_stdout_file = open('stdout', 'w+')
self.gld_stderr_file = open('stderr', 'w+')
...
subprocess.Popen(string.join(gld_open_str, " "), shell=True, stderr=self.gld_stderr_file,
stdout=self.gld_stdout_file, bufsize=-1, close_fds=ON_POSIX,
env={'TEMP':temp_path})
このエラーはpopenのを(使用する試みの約5~10%を生じる)、一方、他のpopenの()は、うまく同じループ作業のコール。周りを見渡すと、これは低レベルのソケット呼び出しのエラーから来ている可能性があり、直接インタフェースしていない可能性があります。 (例:Hereまたはhere)
なぜこのエラーが発生するのですか?
そして、もっと重要なこと:私はそれを修正する方法を
?
参考のため、複数のサブプロセス呼び出しで安定性が向上しているsubprocess32を使用しています。また、関連する場合は、複数の計算ノードが同時に同じことを試みるように、スキーム全体がより大きなMPIベースのHPC並列呼び出しにラップされます。同じファイルを複数回実行しようとすると競合やファイルシステムの問題が発生する恐れがあるため、実行前にこれらのノードにバイナリをコピーしています。
はまた、私はのようにshell=False
を使用して同じ問題を参照してください。
subprocess.Popen(gld_open_list, shell=False, stderr=self.gld_stderr_file,
stdout=self.gld_stdout_file, bufsize=-1, close_fds=ON_POSIX,
env={'TEMP':temp_path})
私のテストはLinux(Red Hat Enterprise Server 6.3)で行われました –