我有一个sqlite数据库,可以用作缓存并使用此功能
def read_cache(table):
if not table.isidentifier(): # <- my version of sqli protection used to allow for user to provide table and column names
raise ValueError(f"Invalid table name '{table}'")
for record in cur.execute(f"SELECT * FROM {table};"):
yield {**record}
调用list(read_cache('some_values'))
会花很长时间(将近一分钟)返回,但是当我对数据库本身运行查询时(如cur.execute('select * from some_values;').fetchall()
或[r for r in cur.execute('select * from some_values;')]
),它将立即返回。 / p>
有问题的表有4万行,每行2列
我应该怎么做才能发现问题或加快速度?
编辑:我想我发现了这个问题,速度问题仅在运行某些threading.Thread
的解释器中发生...想知道问题是否与GIL相关...会必须看看该怎么做...