在pool.imap调用的函数中清空队列

时间:2019-07-23 07:53:44

标签: python multiprocessing queue pool

here提供的示例的启发!我需要在池调用的函数中使用队列,但在函数中将其清空。 以下代码似乎有效,但不能正确关闭池。我的错误在哪里?

我正在使用python 2.7常规版(用于inkscape扩展)

import multiprocessing as mp

def f(x):
    ret=1000*x
    print(str(x)+" starting ")
    while not f.q.empty():
        z=f.q.get()
        ret+=z
        print (str(x)+" do "+str(z))

    print(str(x)+" done ")
    return ret

def f_init(q):
    f.q = q

def main():
    cpus=mp.cpu_count()

    q = mp.Queue()

    x=0
    while x<20:
        q.put(x)
        x+=1

    p = mp.Pool(cpus, f_init, [q])
    results = p.imap(f, range(cpus))

    p.close()

    print("results :")
    for bResult in results:
        print(bResult)


if __name__ == '__main__':
    main()

此代码显示所有过程均定期进行,但主程序保持暂停状态。 print(bResult)永远不会发生

0 个答案:

没有答案