我遇到通过python脚本运行多个c ++程序的问题。 所有进程都正在执行,并且所有进程都完成了0错误等,但进程没有在CPU上运行100%。
以下是代码:
#!/usr/bin/python
import os, shutil, time, math
from sys import *
CPUs=64
shs={}
for i in range(CPUs):
fname="run"+repr(i)+".sh"
shs[i]=file(fname,"w")
#print "nohup bash "+fname+" &"
time.sleep(0.01)
fin = file("adatokOriginal.txt")
lines = fin.readlines()
fin.close()
# kezdpath = "./szimulaciok_n5_5240_"+str(n)+"/szimul_"+str(m)+"/instanc_"+str(l)
# if(os.path.isdir(kezdpath)):
# shutil.rmtree(kezdpath)
# os.mkdir(kezdpath,0777)
for m in range (5):
k=0
for j in range(33):
print(m,j)
mu=10**(-6) * j**(math.log(10,2))
for i in range (1000):
fout = file("adatok.txt", "w+")
Pathpath = "./szimulaciok_n5_5240"+"_"+str(m)+"/szimul"+"_"+str(j)+"/instanc_"+str(i)
if (os.path.isdir(Pathpath)):
shutil.rmtree(Pathpath)
os.makedirs(Pathpath,0777)
for line in lines:
line=line.strip()
if line == "outputDir= default":
# fout.write("outputDir= "+str(path)+"/\n")
print("lel")
elif line == "mutrata= 1":
fout.write("mutrata= "+str(mu)+"\n")
elif line == "szintszam= 5":
n=5-m
fout.write("szintszam= "+str(n)+"\n")
#elif line == "mutrata= 0.1":
# fout.write("mutrata= "+str(1)+"\n")
else:
fout.write(line+"\n")
fout.close()
os.rename("./adatok.txt", Pathpath+"/adatok.txt")
shutil.copyfile("./gnuplotscriptOriginal.plt", Pathpath+"/gnuplotscriptOriginal.plt")
k=0
for c in range(5):
for b in range(33):
for a in range(1000):
path = "./szimulaciok_n5_5240"+"_"+str(c)+"/szimul"+"_"+str(b)+"/instanc_"+str(a)
shs[k%CPUs].write("cd "+path+"\n")
shs[k%CPUs].write("../../../szimu >/dev/null\n")
shs[k%CPUs].write("cd ../../..\n")
k = k+1
for i in range(CPUs):
shs[i].close()
for i in range(CPUs):
fname="run"+repr(i)+".sh"
os.chmod(fname,0777)
os.system("./"+fname+"&\n")
time.sleep(0.01)
print("ok")
我可以同时运行64个进程,其中我有5次33次1000进程来执行和运行。唯一的问题是我平均有45%的CPU利用率。
请帮忙!
谢谢!
答案 0 :(得分:2)
性能低下的原因是每次循环迭代期间的大量I / O操作。正如我在您的代码中看到的那样,在每次迭代中,您都在文件中写入需要访问磁盘的内容。当操作系统访问磁盘时,CPU将被释放用于其他用途,这会导致应用程序的总体性能降低。 如果要测试实际的CPU性能,只需注释IO命令并用一些CPU消耗操作(如计算)替换它们就足够了。然后测量你的CPU使用情况。