実行する分析のセグメントを指定する引数を取るデータ分析スクリプトがあります。'n'がマシン上のコアの数であるときに、スクリプトの最大'n'インスタンスを実行したいと思います。複雑なのは、コアよりも分析のセグメントが多いため、最大で「n」プロセスを一度に実行し、そのうちの1つが終了して、別のプロセスを開始することです。サブプロセスモジュールを使用する前に、誰かがこのようなことをしたことがありますか?
質問する
280 次
2 に答える
10
マルチプロセッシングモジュールは、必要なものを実現するのに役立つと思います。テクニックの例を見てください。
import multiprocessing
def do_calculation(data):
"""
@note: you can define your calculation code
"""
return data * 2
def start_process():
print 'Starting', multiprocessing.current_process().name
if __name__ == '__main__':
analsys_jobs = list(range(10)) # could be your analysis work
print 'analsys_jobs :', analsys_jobs
pool_size = multiprocessing.cpu_count() * 2
pool = multiprocessing.Pool(processes=pool_size,
initializer=start_process,
maxtasksperchild=2, )
#maxtasksperchild = tells the pool to restart a worker process \
# after it has finished a few tasks. This can be used to avoid \
# having long-running workers consume ever more system resources
pool_outputs = pool.map(do_calculation, analsys_jobs)
#The result of the map() method is functionally equivalent to the \
# built-in map(), except that individual tasks run in parallel. \
# Since the pool is processing its inputs in parallel, close() and join()\
# can be used to synchronize the main process with the \
# task processes to ensure proper cleanup.
pool.close() # no more tasks
pool.join() # wrap up current tasks
print 'Pool :', pool_outputs
ここで、最初に優れたマルチプロセッシング手法を見つけることができます。
于 2012-10-07T05:07:54.213 に答える
1
multiprocessing
モジュール、特にPool
クラスを使用します。Pool
プロセスのプール(デフォルトでは、CPUと同じ数のプロセス)を作成し、次の空きプロセスで実行されるジョブをプールに送信できるようにします。すべてのサブプロセス管理とタスク間でのデータの受け渡しの詳細を処理するため、非常に簡単な方法でコードを記述できます。使用例については、ドキュメントを参照してください。
于 2012-10-07T04:36:46.653 に答える