Actualmente estoy seleccionando una gran lista de filas de una base de datos usando pyodbc. El resultado luego se copia en una lista grande, y luego estoy tratando de iterar sobre la lista. Antes de abandonar Python, y tratar de crear esto en C#, quería saber si había algo que estaba haciendo mal.Python es lento al iterar sobre una lista grande
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
Algunos más información:
- El bucle se está ejecutando actualmente en alrededor de 5 ciclos por segundo, y que parece increíblemente lento para mí.
- El total de filas seleccionadas es ~ 489,000.
- La máquina que se ejecuta tiene mucha RAM y CPU. Parece que solo ejecuta uno o dos núcleos, y ram es 1.72GB de 4gb.
¿Alguien puede decirme qué pasa? ¿Los scripts solo funcionan así de lentos?
Gracias
¿'clientItemRow [0]' es realmente grande? 489,000 es un número bajo de filas, pero 5rows/s es ridículamente lento. Además, alguien puede corregirme si me equivoco, pero estoy bastante seguro de que tu código, tal como está escrito, solo se ejecutará en un núcleo, pero aún así debería ser millas más rápido que 5 iteraciones por segundo. Además, puedes usar el perfil c incorporado para ver dónde estás golpeando un cuello de botella. – prelic
En cuanto al uso de CPU, si está haciendo cosas extravagantes con los resultados que recupera, puede obtener más núcleos de CPU en la mezcla utilizando el módulo de multiprocesamiento de Python, pero primero tengamos en cuenta esta interacción. – jsbueno
¿Qué devuelve 'type (allIDRows)'? – tMC