[英]Performance: look in list or sql query
我用PyQt和sqlite開發了一個軟件來管理科學文章。 每篇文章都存儲在sqlite數據庫中,並且來自特定的期刊。
有時,我需要對期刊文章進行一些驗證。 因此,我建立了兩個列表,一個包含文章的DOI(DOI只是文章的唯一ID),另一個包含布爾值,如果文章還可以,則為True,否則,則為False:
def listDoi(self, journal_abb):
"""Function to get the doi from the database.
Also returns a list of booleans to check if the data are complete"""
list_doi = []
list_ok = []
query = QtSql.QSqlQuery(self.bdd)
query.prepare("SELECT * FROM papers WHERE journal=?")
query.addBindValue(journal_abb)
query.exec_()
while query.next():
record = query.record()
list_doi.append(record.value('doi'))
if record.value('graphical_abstract') != "Empty":
list_ok.append(True)
else:
list_ok.append(False)
return list_doi, list_ok
此函數返回兩個列表。 每個列表可以包含約2000個項目。 在那之后,要檢查一篇文章是否還可以,我只需檢查一下它是否在兩個列表中。
編輯:我還需要檢查是否僅在list_doi中的文章。
所以我想知道,因為性能在這里很重要:什么是更快/更好/更經濟:
RAM的速度和空間如何? 如果項目很少或很多,結果會有所不同嗎?
使用time.perf_counter()確定當前該過程花費的時間。
time_start = time.perf_counter()
# your code here
print(time.perf_counter() - time_start)
基於此,如果速度太慢(),則可以嘗試每個選項,並對它們進行計時,以尋求性能上的改進。 至於檢查RAM使用情況,一種簡單的方法是:
import os
import psutil
process = psutil.Process(os.getpid())
print process.get_memory_info()[0] / float(2 ** 20) # return the memory usage in MB
有關更深入的內存使用情況檢查,請參見此處: https : //stackoverflow.com/a/110826/3841261在尋求提高速度/ RAM使用率/等等時,總有一種客觀的方法。
我將執行一個sql查詢,一次查找確定的文章(也許在名為find_articles()
的函數中)
這樣想,為什么一次只能做兩次(復制所有這些行並與之協同工作)?
您基本上要執行此操作:
SELECT * from papers where (PAPERID in OTHERTABLE and OTHER RESTRAINT = "WHATEVER")
那顯然只是偽代碼,但我想您可以弄清楚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.