2016-09-22 10 views
1

モザイク化される前に1つのコマンドだけを使って前処理する必要のあるファイルのリストがあります。この前処理コマンドは、geoTIFFに書き込むためにサードパーティのソフトウェアをシステムコール経由で使用します。マルチスレッドを使用して、個々のファイルを同時に事前処理してから、すべての個々のファイルを処理したら、結果を一緒にモザイクすることができます。Pythonでマルチスレッド/並列処理を行う最も簡単な方法

インターネットで検索する前に、また数時間後にマルチスレッド/並列処理を使用したことはありませんが、これについては最も簡単で簡単な方法は何もわかりません。

基本的には、このようなものは:

files_list = # list of .tif files that need to be mosaicked together but first, need to be individually pre-processed 

for tif_file in files_list: 
    # kick the pre-processing step out to the system, but don't wait for it to finish before moving to preprocess the next tif_file 

# wait for all tiffs in files_list to finish pre-processing 
# then mosaick together 

どのように私はこれを達成できますか?

+0

によって制限されていますか? –

+0

このタスクを並列化する理由は何ですか?これらのファイルを1つずつ実行することは、オーバーヘッドのPythonがマルチスレッドのために、はるかに高速です(特別なケースを除いて)。 –

+0

@PeterWood前処理ステップの出力は、一緒にモザイクする必要があるgeoTIFFです – user20408

答えて

0

multiprocessingのドキュメントを参照してください。

from multiprocessing import Pool 

def main(): 
    pool = Pool(processes=8) 
    pool.map(pre_processing_command, files_list) 

    mosaic() 

if __name__ == '__main__': 
    main() 
0

あなたが好きなものを使用することができる最も簡単な場合には、あなたがmultiprocessを使用する必要があり、複数のプロセッサコアを使用する必要がある場合:

def process_function(tif_file): 
    ... your processing code here ... 

for tif_file in files_list: 
    p = Process(target=process_function, args=(tif_file)) 
    p.start() 
    p.join() 

非常に多くのプロセスがで実行されているので、あなたは、世話をする必要があります同じ時間がPCリソースを超えている可能性があります。問題の解決方法はherehereです。

またthreading.threadを使用することができますが、それは唯一つのプロセッサコアを使用し、前処理の出力は何Global Interpreter Lock

関連する問題