在 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
块中很重要。
事情是这样的:
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
块中很重要。