我使用mpi4py来建模一个分布式应用程序。你知道吗
我有n个进程访问一个共享文件,并在执行期间将一些日志写入共享文件。我注意到日志的书写并不统一。下面是如何将日志写入共享文件的示例:
process0.log0
process0.log1
process0.log2
process0.log3
process0.log4
process2.log0
process2.log1
process2.log2
process1.log0
process1.log1
理想情况下应该是:
process0.log0
process1.log0
process2.log0
process0.log1
process2.log1
process1.log1
process0.log2
有人能告诉我我的实现可能有什么问题吗?我正在使用Pickle模块写入文件。你知道吗
以下是转储日志的函数:
import pickle
log_file_name = "store.log"
def writeLog(data):
try:
with open(log_file_name,"a") as fp:
pickle.dump(obj=data,file=fp)
except:
with open(log_file_name,"w") as fp:
pickle.dump(obj=data,file=fp)
def readLog():
data = []
try:
with open(log_file_name,"r") as fp:
while True:
data.append(pickle.load(fp))
return data
except EOFError:
return data
所有n个进程都访问这个函数来转储数据
有很多问题/答案可以解释你在这里看到的现象:
即使这些都是(主要)谈论打印到屏幕上,问题是一样的。MPI是一种分布式模型,这意味着某些进程的执行速度会比其他进程快,而且根据每个进程的工作负载/顺序,每次的执行顺序可能会有所不同。你知道吗
如果排序很重要,您可以使用同步函数来实现它,也可以使用一些更高级的东西,比如MPI I/O来写入文件(这不是我的专长,所以我不能告诉您更多)。你知道吗
相关问题 更多 >
编程相关推荐