Я выполняю запрос в таблице, где я получаю столбец со стомиллинами строк назад, потому что я хочу построить их в гистограмме. Проблема заключается в том, что до того, как программа завершится с кодом выхода -9, до того, как cur.fetchall() будет завершен, почти вся моя память (7,8 ГБ) и вся моя память подкачки (8 гб) будет завершена.Pythons fetchall ест всю мою своп-память
Как я могу предотвратить это? Должен ли я сначала отсортировать мой столбец, а затем сделать несколько запросов на нем, или может быть, лучший способ получить данные в моем запросе? Сам cur.execute почти не требует времени.
#!/usr/bin/python
import sqlite3 as lite
import numpy as np
import sys
import os
import matplotlib.pyplot as plt
def getQuantity(databasepath):
con = lite.connect(databasepath)
binwidth = 1
start = time.time()
with con:
cur = con.cursor()
cur.execute('SELECT latitude FROM MessageType1')
con.commit()
latitudes = cur.fetchall() #Breakdown here
latitudes = [x[0] for x in latitudes]
plt.hist(latitudes, bins=range(int(min(latitudes)), int(max(latitudes)) + binwidth, binwidth))
plt.title("Bucket size: " + str(binwidth))
plt.ylabel("Number of message")
plt.savefig('latlongstats'+'t'+str(time.strftime("%H:%M:%S")), format='png')
if __name__ == "__main__":
getQuantity('database/database.db')
Попробуйте использовать выражение генератора 'latitudes = (x [0] для x в широтах)' –
Извините, я должен был указать, код выхода и ошибка возникают до того, как cur.fetchall имеет возможность закончить. – bjornasm
Не знаете, что вы можете сделать тогда, построение - это чересчур много памяти, поэтому факт, что у вас так много данных, вероятно, означает, что вам просто не хватает бара. –