cpp程序在服务器

时间:2017-04-03 17:06:16

标签: python c++ bash server

我遇到通过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利用率。

请帮忙!

谢谢!

1 个答案:

答案 0 :(得分:2)

性能低下的原因是每次循环迭代期间的大量I / O操作。正如我在您的代码中看到的那样,在每次迭代中,您都在文件中写入需要访问磁盘的内容。当操作系统访问磁盘时,CPU将被释放用于其他用途,这会导致应用程序的总体性能降低。 如果要测试实际的CPU性能,只需注释IO命令并用一些CPU消耗操作(如计算)替换它们就足够了。然后测量你的CPU使用情况。