2

マップリデュースっぽいETLを実行しているPythonスクリプトがあります。私はコードの創始者ではありませんが、いくつかの改善のためにその実行時間を分析/診断するために働いています。

パッケージでは、「プロセス」を使用します。

worker = Process(target=grab_worker)

worker.start() 

これは、CDNから新しいファイルを抽出するための完全なFTPループを実行し、FTPコードを含めることはできませんが、質問に関連するものではありません。

コードの後半で、Poolいくつかの非同期関数を実行するワーカーのインスタンスを作成します。

workerpool =  multiprocessing.Pool(processes=4)
# ...
resultobjs[k] = workerpool.apply_async(func, args=fargs)

繰り返しになりますが、その中の基礎となるコードは、まだコードが含まれていないと私が思う質問とは無関係であるはずです。

私の質問は、Pythonで、ワーカーを作成するPoolと、そこにあるワーカーは?と「共有」されるのProcessでしょうか。

つまり、最初にプロセスで1つのワーカーを作成し、後でプールクラスでワーカーを作成するときに、ループが戻ってプロセスに登録されている関数を実行しようとすると、以前に作成されたワーカーが使用されます。 ?

または、代わりに、各クラスインスタンスがスポーンしたワーカーのみを参照できるようにすることで、「ホットサイドホットサイドとコールドサイドコールド」を維持しますか(Process以前に作成した1つのワーカーを再利用しPool、指定されたワーカーを引き続き使用しますProcess。によって生成されたワーカーPool)。

4

1 に答える 1

1

mp.Processについて何も知りませんmp.Pool。したがって、への呼び出しはmp.Process、によって生成されたプロセスを何らかの形で使用しませんmp.Pool

于 2012-09-20T17:34:00.907 に答える