使用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
答案 0 :(得分:2)
您应该可以使用poolDict.clear()
清空字典。当我从Linux上的命令提示符运行此代码时,我看到打印出现时没有任何问题。你是如何执行你的脚本的?