遍历大列表时Python速度很慢
问题内容:
我目前正在使用pyodbc从数据库中选择大量行。然后将结果复制到一个大列表中,然后我尝试遍历该列表。在放弃python并尝试在C#中创建它之前,我想知道是否做错了什么。
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。
谁能告诉我怎么了?脚本运行这么慢吗?
谢谢
问题答案:
对于Python本机列表,这应该不会很慢-但是,也许ODBC的驱动程序正在返回一个“惰性”对象,该对象试图变得很聪明,但变得很慢。尝试做
allIDRows = list(clientItemsCursor.fetchall())
在您的代码中并发布进一步的基准测试。
(如果您开始在中间插入内容,Python列表可能会变慢,但是仅在大列表上进行迭代应该很快)