问题是:
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)
。
调用的Flush变体会立即刷新缓冲区,以便立即看到打印。而非刷新变体可能会将字符串保留在缓冲区中,直到稍后将其刷新到屏幕。
还要始终在with
块内(在末尾(执行pool.close()
和pool.join()
,而不是像您那样在外侧执行。对于只有.map()
函数的情况,这并不重要,因为它正在阻塞调用,但对于其他一些情况,关闭/加入with
块是很重要的。