1
首先感謝您的關注。我的問題是如何減少我的代碼的執行時間。Python性能分析(文件關閉)
這裏是相關的代碼。下面的代碼在main中迭代調用。
def call_prism(prism_input_file,random_length):
prism_output_file = "path.txt"
cmd = "prism %s -simpath %d %s" % (prism_input_file,random_length,prism_output_file)
p = os.popen(cmd)
p.close()
return prism_output_file
def main(prism_input_file, number_of_strings):
...
for n in range(number_of_strings):
prism_output_file = call_prism(prism_input_file,z[n])
...
return
我在分析我的代碼時使用了「配置文件統計瀏覽器」中的統計信息。 「文件關閉」系統命令佔用了最大時間(14.546秒)。 call_prism例程被調用10次。但number_of_strings通常是數千,所以,我的程序需要花費很多時間才能完成。
讓我知道你是否需要更多信息。順便說一下,我也嘗試了子進程。謝謝。
您應該使用子進程,無論這是否是用進程調用所有其他方式的替代方法。但是如果你必須使用系統進程,我認爲你沒有太多的辦法可以做。它們是昂貴的。 – jdi
如果不是棱鏡而是調用一些簡單的命令,比如'echo','p.close()'還會佔用這麼多時間?棱鏡過程很可能需要一些很長的終止清理操作。順便說一句,如果棱鏡調用不互相依賴,那麼可以通過在並行線程中運行多個進程(例如,在每個內核的線程上)來嚴格減少執行時間。 – 9000