クラスのデータ メンバーである関数を処理する際の multiprocessing モジュールの制限に関するさまざまな 議論を認識しています (Pickling の問題による)。
しかし、次のようなものを具体的に許可する別のモジュール、またはマルチプロセッシングの何らかの回避策がありますか (具体的には、関数の定義を並列に適用してクラスの外に存在させることはありません)。
class MyClass():
def __init__(self):
self.my_args = [1,2,3,4]
self.output = {}
def my_single_function(self, arg):
return arg**2
def my_parallelized_function(self):
# Use map or map_async to map my_single_function onto the
# list of self.my_args, and append the return values into
# self.output, using each arg in my_args as the key.
# The result should make self.output become
# {1:1, 2:4, 3:9, 4:16}
foo = MyClass()
foo.my_parallelized_function()
print foo.output
注: これは、クラスの外に移動して、またはコマンドのmy_single_function
ようなものを渡すことで簡単に実行できます。しかし、これは関数の並列化された実行を のインスタンスの外にプッシュします。foo.my_args
map
map_async
MyClass
私のアプリケーション (毎月のデータのクロス セクションを取得、結合、およびクリーンアップし、それらをそのようなクロス セクションの長い時系列に追加する大規模なデータ クエリを並列化する) では、この機能を私のプログラムのさまざまなユーザーが、さまざまな時間間隔、さまざまな時間増分、収集するデータのさまざまなサブセットなどでクラスのさまざまなインスタンスをインスタンス化するため、それらはすべてそのインスタンスに関連付ける必要があります。
したがって、並列化されたクエリに関連するすべてのデータをインスタンスが所有しているため、並列化の作業もインスタンスによって実行されるようにしたいと考えています。クラス(特に、そのような関数は一般的ではないため、クラス内からあらゆる種類の詳細が必要になります。)