ファンクションにセマフォを渡すことによって、複数のワーカー間で共有リソースへのアクセスをPython multiprocessing.Pool
で同期したいと思います。ここにいくつかの疑似コードがあります。Pythonマルチプロセッシングを使用してファンクション付きセマフォを共有する
def do_work(payload, semaphore):
with semaphore:
access_the_shared_resource(payload)
機能do_work
は、私は機能が継承できるというのが私のローカルスコープでセマフォを定義することができないようなライブラリで定義されています。 multiprocessing
は許可されていないセマフォをpickleしようとしているので、functools.partial
を使ってセマフォを渡すこともできません。何がSemaphore
へのプロキシを作成するために、multiprocessing.Manager
を使用して動作するようです:
manager = multiprocessing.Manager()
semaphore = manager.Semaphore()
with multiprocessing.Pool() as pool:
results = pool.map(functools.partial(do_work, semaphore=semaphore), payloads)
が、これが最善のアプローチですか、私は明白な解決策をしないのですか?