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



我在这个论坛上发现了一些与我类似的问题,但没有一个对我的特定问题有帮助(我对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程序中发现的行为相同,该程序也使用了多处理池。我本以为进程可能会以错误的顺序打印到文件中,但我很困惑为什么什么都不打印。如果我去掉了多处理,只在一个进程中运行相同的基本代码,它会很好地打印到文件中。有人能帮我理解我在这里做错了什么吗?谢谢

我认为您已经进入了未定义的领域,但只需要flush处理文件就可以了。例如:

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。我还缩短了您的代码以澄清这个问题,并使其更加地道。

相关内容

  • 没有找到相关文章