gpt4 book ai didi

mysqldb 上的 Python 多处理

转载 作者:行者123 更新时间:2023-11-30 21:43:56 25 4
gpt4 key购买 nike

我正在尝试插入以更新 MySQL 数据库中非常大的数据值,并且在同一次尝试中,我试图在进程列表中查看正在做什么!

所以我做了以下脚本:

我有一个经过修改的数据库 MySQL,负责连接。除非我使用多进程,否则一切工作正常,如果我使用多进程,我有时会收到“与数据库失去连接”的错误。

脚本是这样的:

from mysql import DB
import multiprocessing

def check writing(db):
result = db.execute("show full processlist").fethcall()
for i in result:
if i['State'] == "updating":
print i['Info']

def main(db):
# some work to create a big list of tuple called tuple
sql = "update `table_name` set `field` = %s where `primary_key_id` = %s"

monitor = multiprocessing.Process(target=check_writing,args=(db,)) # I create the monitor process
monitor.start()
db.execute_many(sql,tuple) # I start to modify table
monitor.terminate()
monitor.join

if __name__ == "__main__"

db = DB(host,user,password,database_name) # this way I create the object connected

main(db)

db.close()

我的 mysql 类的一部分是:

class DB:
def __init__(self,host,user,password,db_name)
self.db = MySQLdb.connect(host=host.... etc

def execute_many(self,sql,data):
c = self.db.cursor()
c.executemany(sql, data)
c.close()
self.db.commit()

正如我之前所说,如果我不尝试在 check_writing 中执行,脚本工作正常!

也许有人可以向我解释是什么原因以及如何克服?此外,我在尝试使用 map(或 map_async)在 MySQL 中编写 threadPool 时遇到问题。我是否遗漏了与 mysql 相关的内容?

最佳答案

有一个更好的方法来解决这个问题:

连接器/Python 连接池:

  • mysql.connector.pooling 模块实现池化。

  • 在向请求者提供连接时,池会打开多个连接并处理线程安全。

  • 连接池的大小可在池创建时配置。之后无法调整大小。

  • 可以有多个连接池。例如,这使应用程序能够支持与不同 MySQL 服务器的连接池。

Check documentation here

我认为您的并行进程正在耗尽您的 mysql 连接。

关于mysqldb 上的 Python 多处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50359291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com