为了账号安全,请及时绑定邮箱和手机立即绑定

Peewee 查询在多线程下运行缓慢

Peewee 查询在多线程下运行缓慢

长风秋雁 2023-05-09 09:58:16
在将 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()
查看完整描述

1 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

Peewee 将连接状态存储在线程局部变量中。因此,每个线程都有一个单独的连接。如果您查看分析输出,我认为具有指导意义的行是:

22       100    6.415    0.064    6.618    0.066 /usr/lib64/python2.7/site-packages/MySQLdb/connections.py:62(Connection.__init__

您要建立 100 个不同的连接,这很昂贵。

据推测,一旦您设置了它们,查询的性能就会提高一些。


查看完整回答
反对 回复 2023-05-09
  • 1 回答
  • 0 关注
  • 100 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信