1

多数のサブプロセスを作成するスクリプトを実行すると、Python に問題があるようです。サブプロセス作成コードは次のようになります。

コード:

def execute(cmd, stdout=None, stderr=subprocess.STDOUT, cwd=None):
    proc = subprocess.Popen(cmd, shell=True, stdout=stdout, stderr=stderr, cwd=cwd)
    atexit.register(lambda: __kill_proc(proc))
    return proc

私が受け取っているエラーメッセージは次のとおりです。

OSError: [Errno 24] 開いているファイルが多すぎます

このエラーが発生すると、スクリプトを強制終了して再度開始するまで、それ以上サブプロセスを作成できません。次の行が責任を負う可能性があるかどうか疑問に思っています。

atexit.register(lambda: __kill_proc(proc))

この行がサブプロセスへの参照を作成し、スクリプトが終了するまで「ファイル」が開いたままになる可能性がありますか?

4

2 に答える 2

1

したがって、次の行のようです:

atexit.register(lambda: __kill_proc(proc))

まさに犯人でした。これはおそらく、Popen 参照が保持されているため、プロセス リソースが解放されていないためです。その行を削除すると、エラーはなくなりました。@Bakuriu が提案したようにコードを変更し、Popen インスタンスではなくプロセスの pid 値を使用しています。

于 2012-09-25T17:25:11.053 に答える