【问题标题】:Four processes appending text to the same file将文本附加到同一文件的四个进程
【发布时间】: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


【解决方案1】:

我做了一个快速测试,打开同一个文件,它没有给我任何问题。

已经使用Python36。

测试如下:

test1.py

with open("test","a+") as file_:
    file_.write("First process!\n")
print("done!")

test2.py

with open("test","a+") as file_:
    file_.write("Second process!\n")
print("done!")

python3 test1.py & python3 test2.py

输出符合预期。

First process! Second process!

在同一个文件上运行了很多其他变体(第一个位串,同时第二个位串),没有遇到任何错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2018-09-23
    • 2011-07-24
    • 2021-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-08-12
    相关资源
    最近更新 更多