リクエストタイプのオブジェクトのリストを取り込み、リクエスト(オブジェクトの.execute()APIを使用)を実行してリクエストの結果を返すことのできるクラスを作成中です。私はこれを複数処理させようとするときに問題にぶつかっています。私は過去にプールを使用していましたが、ここで働くのに苦労しています。プールからExecutorクラスの静的メソッドを実行しようとすると、私はPicklingErrorを受け取ります。しかし、新しいProcessオブジェクトから直接実行すると、期待どおりに動作するように見えます。この現象の原因は何ですか?私がここで間違ってやっていることは明らかですか?これをPython 2.6で実行するとbtwマルチプロセッシングプールPicklingError
ありがとう!
執行クラス:
class Executor(object):
def __init__(self, max_threads):
self.max_threads = max_threads
@staticmethod
def execute_request_partition(requests):
return [request.execute() for request in requests]
def execute_requests(self, list_of_requests):
partitions = split_list(list_of_requests, self.max_threads)
# Seems to execute as expected
process = Process(target=self.execute_request_partition, args=(partitions[0],))
process.run()
# PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed
p = Pool(1)
p.apply_async(self.execute_request_partition, args=(partitions[0],))
p.close()
p.join()
'multiprocessing'の代わりに' multiprocess'を使うと時間と神経を大いに節約できます。 –