25

LinuxボックスでPythonでマルチプロセッシングを使用して並列コマンドを実行するために、 この回答を使用していました。

私のコードは次のようなことをしました:

import multiprocessing
import logging

def cycle(offset):
    # Do stuff

def run():
    for nprocess in process_per_cycle:
        logger.info("Start cycle with %d processes", nprocess)
        offsets = list(range(nprocess))
        pool = multiprocessing.Pool(nprocess)
        pool.map(cycle, offsets)

しかし、私はこのエラーを受け取っていましOSError: [Errno 24] Too many open files
た:コードがあまりにも多くのファイル記述子を開いていました。つまり、あまりにも多くのプロセスを開始し、それらを終了していませんでした。

最後の 2 行を次の行に置き換えて修正しました。

    with multiprocessing.Pool(nprocess) as pool:
        pool.map(cycle, offsets)

しかし、なぜこれらの行が修正されたのか正確にはわかりません。

その下で何が起こっているのwithですか?

4

4 に答える 4