私は、各プロセスがリストの一部を処理するように、プロセスまたはスレッド間で分割したいイメージパスのリストを持っています。処理には、ディスクからイメージをロードし、計算を実行して結果を返す処理が含まれます。私はここでmultiprocessing.Pool
PythonマルチプロセッシングプールとマルチプロセッシングThreadPool
私は労働者が、私は私の初期化子機能で初期化時間を記録するとき、私は」労働者が上がらないことを知っているようになったことを
def ProcessParallel(classifier,path):
files=glob.glob(path+"\*.png")
files_sorted=sorted(files,key=lambda file_name:int(file_name.split('--')[1]))
p = multiprocessing.Pool(processes=4,initializer=Initializer,initargs=(classifier,))
data=p.map(LoadAndClassify, files_sorted)
return data
私はそれに直面しています問題を処理して作成する方法を説明しますのPython 2.7を使用しています並行して初期化さtは、むしろ各ワーカーは、5秒の間隔で初期化され、ここで同時に労働者を開始私は代わりmultiprocessing.pool.ThreadPool
を使用して試した参照
2016-08-08 12:38:32,043 - custom_logging - INFO - Worker started
2016-08-08 12:38:37,647 - custom_logging - INFO - Worker started
2016-08-08 12:38:43,187 - custom_logging - INFO - Worker started
2016-08-08 12:38:48,634 - custom_logging - INFO - Worker started
のログです。
私はWindows上でのマルチプロセッシングの仕組みを知っており、無限のプロセスを生成することからコードを保護するためにmain guard
を配置する必要があります。私の場合の問題は、FASTCGIを使用してIIS上でスクリプトをホストしていて、スクリプトがメインではなく、FastCGIプロセスによって実行されていることです(それを担当するwfastcgi.pyスクリプトがあります)。現在、wfastcgi.pyの内部にメインガードがあり、ログにはプロセスが無限に作成されていないことが示されています。
今、私は同時にワーカースレッドを作成しない マルチプロセッシング・プールの背後にある理由はまさに、私は 本当に任意の助けを感謝しますことを知ってほしいです。
EDIT 1:ここに私の初期化関数が
だdef Initializer(classifier):
global indexing_classifier
logger.info('Worker started')
indexing_classifier=classifier
「Initializer」とは何ですか? –
作業者が起動する時刻を記録し、各作業者に 'classifier'という変数を渡す – Ahmed
@MuhammadTahir編集した質問をご覧ください – Ahmed