【发布时间】:2018-07-02 13:25:25
【问题描述】:
我有 4 个并行运行的 Python 脚本/进程,每个脚本/进程每隔约 30 秒将文本附加到文件中:
while True:
id = processing_job() # 30 seconds long
with open('log.txt', 'a+') as f:
f.write('Job number #%i done.' % id)
有没有风险,当使用open(..., 'a+')时,2个进程想同时写正好,然后log.txt中有些文本写不出来而丢失了?
注意:我使用的是 Windows 平台。
【问题讨论】:
-
我很确定您将需要某种同步/序列化。如果这些进程是由
multiprocessing创建的,那么您可以将Queue用于可以执行附加的单个消费者。 -
它们不是用
multiprocessing创建的,只是在四个不同的控制台(windows cmd.exe)中运行 -
危险不在于数据丢失,而是交错写入。
-
@WilliamPursell 你到底是什么意思? (不确定理解以及为什么会这样)。风险可能是“抱歉文件不可写,其他人已经在里面写了”,不是吗?
-
如果一个进程在另一个进程正在写入时尝试写入文件,则写入应该阻塞。也就是说,第二个尝试写入的进程将等到第一个完成,然后继续。如果两个进程都在尝试写入数据,那么它们可能会快速交替,从而导致数据交错。
标签: python file io multiprocessing