[英]How to improve the performance?
我已經准備了一個有關制作軟件應用程序的項目。 它是完整的並且可以正常工作,只是執行速度非常慢。.我已經采用了幾段代碼並對它們進行了優化。
我嘗試了psyco ..即我安裝了psyco,並在代碼頂部添加了兩行
import psyco
psyco.full()
不知道這是否是使用psyco ..的方法。 請告訴我如何使用psyco ..,因為我添加了此功能,但沒有任何改善。
我已經嘗試進行性能分析,並且我知道代碼行會花費一些時間,但是這些代碼行無法進一步優化,因此是不可避免的代碼行。
我也想到了使用某些python包在'c'中重寫代碼的選項..但是我在使用其他不屬於基本python的python包中一直有非常糟糕的經驗。
我使用的是python 2.6和Windows Vista。.請告訴方法方法,以顯着提高整個代碼的執行速度..至少5倍。
我沒有用方法編寫代碼,您之間沒有什么方法..沒有main ..
是的,因為很少有人建議我是受IO約束的問題..因為我需要調用該代碼約500次,因此每次打開和關閉文件的數量至少為2。
在這里,當打開一個.pm文件時,它有兩列,我只需要前幾列,所以我將整個前幾列復制到列表中,並將其傳遞給函數以獲取其行號,然后打開其他文件以獲取該行號的元素放入列表...
這是我想要的任務...我想將第一列的元素加載到列表中會花費很多時間來糾正此問題。
如何改善IO瓶頸的性能
拼命尋求幫助
如果可以切換到二進制文件格式,則可以得到更好的性能。 您的大多數代碼都在進行解析和字符串操作。 您正在做很多將字符串轉換為浮點數的操作,這比您想象的要慢。
僅僅通過調整代碼,您不太可能看到5倍的性能差異。
首先,您應該考慮改進算法-您是否在使用最佳數據結構來完成工作? 也許在正確的位置使用dict
或set
可以大大提高代碼的速度。
編寫C模塊並不難,如果找不到改善Python代碼的方法,這是另一種選擇。 通常,使用C代碼可以使速度提高5倍以上。
也許您的問題是IO約束。 然后,您需要研究提高IO性能的方法
如果您在這里需要更多幫助,則可能必須顯示一些代碼或至少描述程序的功能。
更新:看起來您正在打開和關閉許多文件,而這些文件在Windows上往往會非常緩慢。
可以像導入一樣簡單地使用psyco並調用psyco.full()。 所以您正確使用psyco。
如果您嘗試使用C / C ++構建python模塊,請查看boost :: python
您應該真正發布代碼以進行進一步分析。
要優化代碼以提高速度,您只需對其進行概要分析並查看問題出在哪里。 猜測無濟於事。 但是一旦知道了位置,通常最能帶來收益的是降序:改進算法,使用更合適的數據結構,消除資源瓶頸(io,內存,cpu),減少內存分配,減少上下文切換(進程和子例程)。
這是一個優化的機會:您要調用兩次get_list,它們的參數非常相似:
join_cost_index_end[index] = get_list(file, float(abs1), fout)
join_cost_index_strt[index] = get_list(file, float(abs2), fout)
這意味着get_list中的大多數工作都是無緣無故地完成了兩次。 重寫它,以便一次調用get_list,並使它同時返回index_end和index_strt。
為什么bot只嘗試使用cython? 您應該在不更改任何代碼的情況下獲得更好的性能。 稍加修改,這應該會有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.