我有一个管道,在某些时候将工作拆分成各种子流程,并行执行相同的操作。因此,他们的输出应该进入同一个文件。
说所有这些进程应该写入同一个文件是否风险太大?或者,如果python发现该资源被占用,它会尝试重试吗?
答案 0 :(得分:8)
这取决于系统。在Windows中,资源被锁定,您将获得异常。在Linux中,您可以使用两个进程编写文件(可以混合写入的数据)
理想情况下,在这种情况下,您应使用信号量来同步对共享资源的访问。
如果使用信号量太重而无法满足您的需求,那么唯一的选择就是写入单独的文件......
编辑:正如a later post中所指出的那样,资源管理器是另一种处理并发作家的方法
答案 1 :(得分:7)
一般来说,这不是一个好主意,需要花很多精力才能做好。由于写入必须被序列化,因此也可能对可伸缩性产生不利影响。
我建议写入单独的文件并合并(或者将它们作为单独的文件保留)。
答案 2 :(得分:3)
更好的解决方案是实现资源管理器(编写器)以避免两次打开同一文件。该管理器可以使用线程同步机制(threading.Lock
)来避免在某些平台上同时访问。
答案 3 :(得分:2)
如何让所有不同的进程将其输出写入队列,并拥有一个读取该队列的进程,并写入该文件?
答案 4 :(得分:0)
使用multiprocessing.Lock()而不是threading.Lock()。只是提醒一句!可能会降低并发处理能力,因为一个进程只是等待锁被释放