我當前正在使用pyodbc從數據庫中選擇一大列行。然後將結果複製到一個大的列表中,然後我嘗試遍歷列表。在放棄Python之前,嘗試用C#創建它之前,我想知道是否有某件事情我做錯了。遍歷大列表時,Python運行速度很慢
clientItems.execute("Select ids from largetable where year =?", year);
allIDRows = clientItemsCursor.fetchall() #takes maybe 8 seconds.
for clientItemrow in allIDRows:
aID = str(clientItemRow[0])
# Do something with str -- Removed because I was trying to determine what was slow
count = count+1
一些詳細信息:
- for循環正在運行以每秒約5圈,這似乎出奇的慢我。
- 所選的總行數是〜489,000。
- 它運行的機器有很多RAM和CPU。它似乎只運行一個或兩個內核,RAM爲1.72GB的4GB。
任何人都可以告訴我什麼是錯的?腳本運行緩慢嗎?
感謝
'clientItemRow [0]'真的很大嗎? 489,000行是低的,但5行/秒的速度慢得可笑。另外,如果我錯了,有人可以糾正我,但我敢肯定你的代碼只能在一個內核上運行,但仍應該比每秒5次更快。此外,您可以使用內置的cProfile來查看您打到瓶頸的位置。 – prelic 2012-02-22 20:09:03
至於CPU的使用情況 - 如果你用取得的結果做了一些奇特的事情,你可以通過使用Python的多處理模塊來獲得更多的CPU核心 - 但是我們可以首先理解這種交互方式。 – jsbueno 2012-02-22 20:09:20
'type(allIDRows)'返回什麼? – tMC 2012-02-22 20:10:09