【问题标题】:How to use multiple cursors in mysql.connector?如何在 mysql.connector 中使用多个游标?
【发布时间】:2020-04-28 12:07:26
【问题描述】:

我想执行多个查询而不互相阻塞。我创建了多个游标并执行了以下操作,但得到了mysql.connector.errors.OperationalError: 2013 (HY000): Lost connection to MySQL server during query

import mysql.connector as mc
from threading import Thread

conn = mc.connect(#...username, password)
cur1 = conn.cursor()
cur2 = conn.cursor()

e1 = Thread(target=cur1.execute, args=("do sleep(30)",)) # A 'time taking' task
e2 = Thread(target=cur2.execute, args=("show databases",)) # A simple task

e1.start()
e2.start()

但我得到了 OperationalError。阅读其他一些问题,一些人建议使用多个连接比多个游标更好。那么我应该使用多个连接吗?

【问题讨论】:

  • 尝试在线程中创建游标。
  • 您不能使用多个连接的任何特殊原因?游标可能无法做到这一点。无论如何它都不是 MySQLdb,请参阅here
  • @KlausD。会试试的,谢谢。
  • @totalhack 我认为与游标相比,建立多个连接会很繁重......

标签: python mysql multithreading mysql-connector-python


【解决方案1】:

我没有您的情况的完整背景来了解性能注意事项。是的,如果您在严格的时间限制下操作,那么启动新连接可能会被认为很繁重

但您可以通过提前创建的共享连接 pool 来缓解这种情况,然后在资源允许的情况下将查询(在单独的线程中)分布到这些连接上。

另一方面,如果您的所有查询时间相对于创建新连接所需的时间都相当长,并且您不希望并行运行多个查询,那么可以按需创建连接的合理选择。请注意,如果您尝试走得太远,您将遇到打开连接数的限制,以及数据库系统本身的资源限制。您可能不想对共享数据库执行类似的操作。同样,这只是在某些非常具体的情况下的合理选择。

【讨论】:

  • 接受介绍pool的想法。也点赞^^
  • 显然 SO 社区不喜欢您的问题。或者我的回答。具有讽刺意味的是,他们的反馈或缺乏反馈更糟糕。我唯一的猜测是他们认为你可能通过更多的研究自己找到了其他答案。我不一定不同意这一点,但认为最好是有帮助的。
  • 好的...如果他们提供 cmet 来投票,我希望会更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
相关资源
最近更新 更多