1

現在のディレクトリ内のすべてのフォルダーに対して子プロセスを作成して、特定の機能を実行しようとするのに苦労しています(Python 2.7)。

私の考えは次のとおりです。

  • 最初にos.listdir(path)ですべてのフォルダーを取得し、os.path.isdir(file_path)でファイルをフィルタリングします。
  • フォルダーを数えて、必要なフォークの数を計算します。例: 5 つのフォルダーの場合、3つのフォークが必要です (2³ - 1 = 7 つの子プロセス) 。
  • 必要な数のフォークを反復し、各反復でフォルダーのコードを一度に 2 つ実行し、すべてのフォルダー パスを含むリストからパスを取得します。

    for counter in needed_forks:
       folder_pid = os.fork()
       if pid:
          some_function(folder_list[counter])
       else:
          some_function(folder_list[counter+1])
    

主に、反復ごとに繰り返される folder_list の 1 つのインデックスが原因で、適切な出力を得ることができません。マルチプロセッシングと Python を同時に学ぼうとして、この仕事を急いでいます。

ありがとう。

4

1 に答える 1

2

1 つのプロセスだけで fork を続けないのはなぜですか? 次に、使用するフォークの数を計算する必要はありません。

for d in directories:
    if os.fork():
        # parent
        continue
    else:
        # child
        # handle d...
        break # don't keep going

もちろん、forkこの方法でディレクトリを処理するために使用することの賢明さには疑問があります...

于 2012-10-02T00:29:43.627 に答える