遍历大列表时Python速度很慢

发布于 2021-01-29 16:27:11

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

谁能告诉我怎么了?脚本运行这么慢吗?

谢谢

关注者
0
被浏览
143
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    对于Python本机列表,这应该不会很慢-但是,也许ODBC的驱动程序正在返回一个“惰性”对象,该对象试图变得很聪明,但变得很慢。尝试做

    allIDRows = list(clientItemsCursor.fetchall())

    在您的代码中并发布进一步的基准测试。

    (如果您开始在中间插入内容,Python列表可能会变慢,但是仅在大列表上进行迭代应该很快)



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看