我当前正在使用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