在 Python 多处理中。 pool,子进程中如何获取打印结果

In Python multiprocessing. Pool, how to get the print result in the subprocess

事情是这样的:

def main_fun(x):
    ...
    print(x)

if __name__ == "__main__":
    with Pool(5) as pool:
        pool.map(main_fun,range(10000))
    pool.close()
    pool.join()

我的问题是:如果我运行我自己电脑上的代码,它会输出子进程打印结果。但是当我将它作为一个作业提交给集群时,直到整个程序完成我才能看到打印结果。我该如何解决?对了,集群用的是Slurm

尝试 print(x, flush = True) 而不是 print(x)

调用的刷新变体会立即刷新缓冲区,以便立即看到打印。虽然非刷新变体可能会将字符串保留在缓冲区中,直到稍后将其刷新到屏幕。

也总是在 with 块内(最后)做 pool.close()pool.join(),而不是像你那样在外面做。对于只有 .map() 函数的情况,这无关紧要,因为它是阻塞调用,但对于其他一些情况,close/join 在 with 块中很重要。