如果两个python脚本要在同一个文件中写入,会发生什么情况?

如果两个python脚本要在同一个文件中写入,会发生什么情况?,python,file,io,Python,File,Io,我有一个管道,在某一点上,它将工作拆分为多个子进程,这些子进程并行地做同样的事情。因此,它们的输出应该放在同一个文件中 说所有这些进程都应该写入同一个文件是否太冒险?或者python是否会在看到此资源被占用时重试?一般来说,这不是一个好主意,需要非常小心才能正确使用。由于写操作必须序列化,因此还可能对可伸缩性产生不利影响 我建议将文件写入单独的文件并进行合并(或将它们作为单独的文件保留)。这取决于系统。在Windows中,资源被锁定,您会得到一个异常。在Linux中,您可以使用两个进程写入文件(

我有一个管道,在某一点上,它将工作拆分为多个子进程,这些子进程并行地做同样的事情。因此,它们的输出应该放在同一个文件中


说所有这些进程都应该写入同一个文件是否太冒险?或者python是否会在看到此资源被占用时重试?

一般来说,这不是一个好主意,需要非常小心才能正确使用。由于写操作必须序列化,因此还可能对可伸缩性产生不利影响


我建议将文件写入单独的文件并进行合并(或将它们作为单独的文件保留)。

这取决于系统。在Windows中,资源被锁定,您会得到一个异常。在Linux中,您可以使用两个进程写入文件(写入的数据可能是混合的)

理想情况下,在这种情况下,您应该使用信号量来同步对共享资源的访问

如果使用信号量对您的需求来说太重,那么唯一的选择就是在单独的文件中写入


编辑:正如中eye所指出的,资源管理器是处理并发写入程序的另一种选择

更好的解决方案是实现资源管理器(写入程序),以避免打开同一文件两次。此管理器可以使用线程同步机制(
threading.Lock
)来避免在某些平台上同时访问。

让所有不同的进程将其输出写入一个队列,并让一个进程读取该队列并写入文件,怎么样?

使用多处理.Lock()而不是线程。Lock()。只是提醒一下!可能会降低您的并发处理能力,因为一个进程只是等待释放锁

哦,好的!它如何影响可伸缩性?你的意思是,如果突然有很多进程想写入同一个文件,并互相阻塞?@dmeu:基本上就是这样。如果您有多个进程想要同时写入,那么其中只有一个进程能够写入,其余的进程将只是坐在那里等待,而不是做有用的工作。好的,我将不得不研究这个选项。这也适用于集群,对吗?这意味着在一个系统中,计算是在不同的计算机上进行的,但是在一个共享文件系统中,他们在其中写入结果