监控Python并行进程的进度



以下代码返回错误:

local variable 'count' referenced before assignment.

以下是两个功能:

def run():
    ...
    global count
    count = 0
    with closing(Pool(processes=4)) as pool:
    pool.map(run_in_parallel, listOfIds)
    pool.terminate()
    ...
def run_in_parallel(id):
    count += 1
    if count % 1000 == 0:
        print('Processed %d %s' % (count, time.strftime('%x %X')))
    # Do main work in parallel

错误只是因为修改语句而弹出的。即

count +=1

我在一些地方读到,在工作进程中修改全局变量不是一个好的做法。但由于listOfIds是一个巨大的列表,我需要一些方法来监控进度并偶尔打印到终端。如何做到这一点?

我已经阅读了StackOverflow和其他地方的其他帖子,其他问题都没有解决上述完全相同的问题。

发生错误的原因很可能是您没有像在run()函数中那样通过global count提供全局变量count

无论如何,这不会像你希望的那样奏效。每个派生的进程都有自己的全局count变量,它将递增该变量,并且在创建时始终为0

如果你想这样计算,你应该使用Tom Dalton为你链接的例子:

import time
from multiprocessing import Process, Value
def func(val):
    for i in range(50):
        time.sleep(0.01)
        val.value += 1
if __name__ == '__main__':
    v = Value('i', 0)
    procs = [Process(target=func, args=(v,)) for i in range(10)]
    for p in procs: p.start()
    for p in procs: p.join()
    print v.value

相关内容

  • 没有找到相关文章

最新更新