这个问题一般是因为使用了管道或者重定向输出后,缓冲区没有被清空,导致程序挂起。解决方法是在每个进程(或线程)完成后手动清空缓冲区,可以使用如下代码:
import sys
sys.stdout.flush()
或者使用multiprocessing.Pool
类的close()
和join()
方法。例如:
from multiprocessing import Pool
def my_func(x):
# do something
return x
if __name__ == '__main__':
with Pool() as p:
results = p.map(my_func, range(10))
p.close()
p.join()
其中,close()
方法会告诉进程池不会再添加新任务,而join()
方法会等待所有正在处理的任务结束后再继续执行后面的代码。在close()
和join()
方法之间加入缓冲区清空代码即可解决该问题。