使用多处理池将 python 输出写入文件时遇到问题

Trouble writing python output to file with multiprocessing pool

我在这个论坛上发现了一些与我类似的问题,但 none 对我的具体问题有所帮助(我对 python 还很陌生,如果我应该理解,请原谅我来自不同线程的答案)。我实际上正在使用一个相当复杂的 python 代码,但为了说明我遇到的问题,我编写了一个表现出相同行为的非常小的代码:

    from multiprocessing import Pool

    log_output = open('log','w')

    def sum_square(number):
        s = 0
        for i in range(number):
            s += i * i
        log_output.write(str(s)+'\n')
        return s

    if __name__ == "__main__":
        numbers = range(5)
        p = Pool()
        result = p.map(sum_square,numbers)

        p.close()
        p.join()

执行这段代码时,没有任何错误或警告等,但生成的文件“log”始终是空的。这与我在其他使用多处理池的更复杂 python 程序中发现的行为相同。我原以为这些过程可能会以错误的顺序打印到文件中,但我很困惑为什么什么都不打印。如果我摆脱了多处理,只使用 运行 相同的基本代码和单个进程,它就可以很好地打印到文件中。谁能帮我理解我在这里做错了什么?谢谢

我认为您在这里进入了未定义的领域,但只是 flushing 文件对我有用。例如:

from multiprocessing import Pool

log_output = open('log', 'w')

def sum_square(number):
    print(number, file=log_output)
    log_output.flush()

if __name__ == "__main__":
    with Pool() as p:
        p.map(sum_square, range(5))

在 Linux 下的 Python 3.8 中为我工作。我还缩短了您的代码以澄清问题,并使其更加地道。