如何将多处理字典变量重置为默认状态

时间:2014-05-30 18:13:29

标签: python multiprocessing

使用multiprocessing模块声明了一种“特殊”类型的字典变量poolDict。它用于开始的每个multiprocessing进程的写入。从同一个poolDict字典中,主函数能够读取数据。 问题:在完成所有过程之后如何将poolDict重置为空字典到其默认状态?该变量保持“记住”进程写入其中的所有数据。

稍后编辑了代码以说明poolDict使用情况更清晰(以及显示我如何使用while循环从poolDict“实时”中读取进度值

import time
import multiprocessing as mp
poolDict=mp.Manager().dict()

def myFunct(arg):
    print 'myFunct():', arg
    for i in range(110):
        for n in range(500000):
            pass
        poolDict[arg]=i
    print 'myFunct(): completed', arg, poolDict


from multiprocessing import Pool
pool = Pool(processes=2)
myArgsList=['arg1','arg2','arg3']
pool.map_async( myFunct, myArgsList)


def printMessage(arg):
    print '\t The message is:', arg

state=True
while state:
    if not poolDict:
        time.sleep(0.2)
        continue

    printMessage(poolDict)

    check=True
    if len(poolDict.keys())<len(myArgsList):                
        check=False

    for value in poolDict.values():
        if value<105:
            check=False
            time.sleep(0.2)
            print '\n\t\t\t ...SETTING check to', check, 'since one of the values is <105', value
            break           

    if check:
        state=False
        print '\n\t\t\t\t\t YAHOO!!!!', check, 'len(poolDict.keys())<len(myArgsList):',len(poolDict.keys()), 'vs', len(myArgsList), 'and  not a single value is less than 150:', poolDict.values()
        break 

1 个答案:

答案 0 :(得分:2)

您应该可以使用poolDict.clear()清空字典。当我从Linux上的命令提示符运行此代码时,我看到打印出现时没有任何问题。你是如何执行你的脚本的?