私は以下の問題があります。私はリストを入力として受け取り、リスト内の各要素の辞書を作成する関数を書いています。この辞書を新しいリストに追加したいので、辞書のリストを取得します。私はこれのために複数のプロセスを生成しようとしています。ここで問題となるのは、別のプロセスが他のプロセスによって更新されたときに辞書のリストにアクセスすることです。例えば、一定の長さになったら何かを印刷するなどです。 私の例では、このようになります:Pythonで異なるプロセス間でリストを共有
import multiprocessing
list=['A', 'B', 'C', 'D', 'E', 'F']
def do_stuff(element):
element_dict={}
element_dict['name']=element
new_list=[]
new_list.append(element_dict)
if len(new_list)>3:
print 'list > 3'
###Main###
pool=multiprocessing.Pool(processes=6)
pool.map(do_stuff, list)
pool.close()
今私の問題は、各プロセスがnew_list
、独自に作成することです。すべての辞書が同じリストに追加されるように、プロセス間でリストを共有する方法はありますか?または、機能の外にnew_list
を定義する唯一の方法は?
from multiprocessing import Manager, Pool
input_list = ['A', 'B', 'C', 'D', 'E', 'F']
manager = Manager()
shared_list = manager.list()
def do_stuff(element):
global shared_list
element_dict = {}
element_dict['name'] = element
shared_list.append(element_dict)
if len(shared_list) > 3:
print('list > 3')
pool = Pool(processes=6)
pool.map(do_stuff, input_list)
pool.close()
は、スレッドとは異なり、プロセスがメモリ空間を共有していない、覚えておいてください:
[キュー](https://docs.python.org/3/library/multiprocessing.html#pipes-and-queues)を使用してください。 –
または[配列](https://docs.python.org/3.5/library/multiprocessing.html#sharing-state-between-processes) – alexpeits