マップリデュースっぽい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
)。