2017-06-21 19 views
1

私はプロセス間で辞書を共有しています。各プロセスは辞書にエントリを挿入します。辞書内のキーの値はリストまたはgdb.Valueインスタンスになります。上記の行は、私は以下のエラーを取得する実行私はgdb.Valueを挿入していますので、そのように見える、オブジェクト()インスタンスの場合であれば、この作品されている場合 各プロセスは、この値リストを含むPythonマルチプロセッシング.Managerのdict

mydict["key"] = [[2], gdb.Value(someaddress), 3, 4] 

のようなものをやっている

Traceback (most recent call last): 
    File "/test.py", line 631, in insert 
    mydict["key"] = [[2], 1, 3, 4] 
    File "<string>", line 2, in __setitem__ 
    File "/usr/lib/python2.7/multiprocessing/managers.py", line 774, in _callmethod 
    raise convert_to_error(kind, result) 
RemoteError: 
--------------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/multiprocessing/managers.py", line 240, in serve_client 
    request = recv() 
TypeError: Value object creation takes only 1 argument 

私は辞書をループすると、エラー

Traceback (most recent call last): 
    File "/test.py", line 1214, in <module> 
    for item in mydict: 
    File "<string>", line 2, in __getitem__ 
    File "/usr/lib/python2.7/multiprocessing/managers.py", line 774, in _callmethod 
    raise convert_to_error(kind, result) 
+0

代わりに – PMat

答えて

0

失敗した自己完結型の例を投稿してください下に私を与え、あまりにも別の問題を参照してください。ここではあなたが書いたものから1を推測するために私の最高の試みだが、それは正常に動作します:

import multiprocessing as mp 

def e(tag, d): 
    d[tag] = [[tag], tag, tag, tag] 

if __name__ == '__main__': 
    d = mp.Manager().dict() 
    ps = [] 
    for i in range(4): 
     ps.append(mp.Process(target=e, args=(str(i), d))) 
     ps[-1].start() 
    for p in ps: 
     p.join() 
    print(d) 

をそして、それは印刷した:i /ロングPythonのintにgdb.Valueを変換して保存した固定方法

{'0': [['0'], '0', '0', '0'], 
'1': [['1'], '1', '1', '1'], 
'2': [['2'], '2', '2', '2'], 
'3': [['3'], '3', '3', '3']} 
+0

速い返答をありがとう。私はこれが私のユースケースに特有であることに気付きました。オブジェクトのインスタンスをリストに挿入していますが、object()の場合でも動作します。しかし、私はgdb.Value()を挿入しています。 dictをループするときにもエラーが発生します。更新された質問 – PMat

+0

を参照してください。例では、私はd回ループすると、エラーが表示されます。更新された質問をご覧ください – PMat

関連する問題