通常,每个进程都有自己的数据,而与其他每个进程无关。生成新进程(
os.fork在Unix上调用)会创建当前进程的副本。每个进程都获得自己的所有全局值的副本(例如
pbar)。每个进程的全局变量可以与其他进程中的变量共享相同的名称,但是每个进程可以拥有一个独立的值。
在您的情况下,您似乎只希望其中一个
pbar存在,并且对的所有调用
update都应更新该一个
pbar。因此
pbar,仅在一个进程中创建,然后使用
Queue将信号发送到该进程进行更新
pbar:
import multiprocessing as mpSENTINEL = 1def test(q): for i in range(10000): sleep(0.1) q.put(SENTINEL)def listener(q): pbar = tqdm(total = 10000) for item in iter(q.get, None): pbar.update()if __name__ == '__main__': q = mp.Queue() proc = mp.Process(target=listener, args=(q,)) proc.start() workers = [mp.Process(target=test, args=(q,)) for i in range(5)] for worker in workers: worker.start() for worker in workers: worker.join() q.put(None) proc.join()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)