在将 peewee 与线程一起使用时,我发现了这个有趣的场景。
我有一张看起来像这样的桌子
class Locks(BaseModel):
_id = AutoField()
name = CharField(unique=True, index=True)
last_modify_time = DateTimeField(constraints=[SQL("DEFAULT CURRENT_TIMESTAMP")])
owner = CharField()
class Meta:
table_name = 'locks'
我想用这个 sql 查询它包含的记录数:
sql = Locks.select().where(Locks.name == 'test')
sql.execute()
很简单,对吧?但是我发现它运行得非常慢。在没有线程的情况下,查询我们网络中的数据库所需的时间为 3 - 5 毫秒。但是当涉及到多线程时,它会增长到 70 毫秒。
代码如下所示:
def test_lock():
sql = Locks.select().where(Locks.name == 'test')
sql.execute()
def run_thread():
test = threading.Thread(target=test_lock)
test.start()
test.join()
yappi.set_clock_type('Wall')
yappi.start()
for _ in range(100):
run_thread()
yappi.stop()
白衣染霜花
相关分类