如何使用 Python 多线程处理 MySQL 连接

2024-03-26

我有一个主要的 Python 脚本,它连接到 MySQL 数据库并从中提取一些记录。根据返回的结果,它会启动与抓取的记录一样多的线程(类实例)。每个线程都应该返回数据库并通过将一个状态标志设置为不同的状态(“进程已启动”)来更新另一个表。

为了实现这一目标,我尝试:

1.) 将数据库连接传递给所有线程 2.) 从每个线程打开一个新的数据库连接

但他们都没有工作。

在这两种情况下,我都可以使用 try/ except 运行更新,没有任何问题,但 MySQL 表尚未更新,也没有生成错误。我在这两种情况下都使用了提交。

我的问题是在这种情况下如何处理 MySQL 连接?

根据前几条评论进行更新:

MAIN SCRIPT
-----------

#Connecting to DB
db = MySQLdb.connect(host = db_host,
                         db = db_db,
                         port = db_port,
                         user = db_user,
                         passwd = db_password,
                         charset='utf8')

# Initiating database cursor
cur = db.cursor()

# Fetching records for which I need to initiate a class instance

cur.execute('SELECT ...')

for row in cur.fetchall() :
    # Initiating new instance, appending it to a list and
    # starting all of them 



CLASS WHICH IS INSTANTIATED
---------------------------

# Connecting to DB again. I also tried to pass connection
# which has been opened in the main script but it did not
# work either.

db = MySQLdb.connect(host = db_host,
                         db = db_db,
                         port = db_port,
                         user = db_user,
                         passwd = db_password,
                         charset='utf8')

# Initiating database cursor
cur_class = db.cursor()
cur.execute('UPDATE ...')
db.commit()

下面是一个在Python中使用多线程处理mysql的例子,我不知道 您的表和数据,因此,只需更改代码可能会有所帮助:

import threading
import time
import MySQLdb

Num_Of_threads = 5

class myThread(threading.Thread):

    def __init__(self, conn, cur, data_to_deal):
        threading.Thread.__init__(self)
        self.threadID = threadID
        self.conn = conn
        self.cur = cur
        self.data_to_deal

    def run(self):

        # add your sql 
        sql = 'insert into table id values ({0});'
        for i in self.data_to_deal:
            self.cur.execute(sql.format(i))
            self.conn.commit()

threads = []
data_list = [1,2,3,4,5]

for i in range(Num_Of_threads):
    conn = MySQLdb.connect(host='localhost',user='root',passwd='',db='')
    cur = conn.cursor()
    new_thread = myThread(conn, cur, data_list[i])

for th in threads:
    th.start()

for t in threads:
    t.join()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Python 多线程处理 MySQL 连接 的相关文章

随机推荐

  • Intellij - 如何制作一个可以通过 CLI 或 Web 服务执行 IDE 操作的插件?

    我需要一些帮助来开始制作特定的 IntelliJ 插件 我想制作一个 IntelliJ 插件 这样您就可以从 CLI 或者从 Web 服务 如果更容易的话 启动 IntelliJ 操作 例如 我已经用 gradle 脚本构建了我的项目 但我
  • 顶点缓冲区对象(删除过程)opengl

    我什么时候应该调用 glDeleteBuffersARB 我应该在申请结束后做吗 我可以以某种方式自动化删除顶点缓冲区对象的过程吗 例如 smart ptr 之类的东西 绝不 你永远不应该打电话glDeleteBuffersARB 十多年来
  • 在 .NET 中使用 FB Connect / Google OAuth 登录

    我希望允许我的用户使用我的登录系统 FB Connect 或 Google Login 登录我的网站 我不想仅使用大型库 如 dotnetOpenAuth 来实现这两个选项 那么我应该如何实现这一点 其他问题 我应该如何将 FB Googl
  • ALLOWED_HOSTS 和 Django

    我尝试在生产服务器上启动 Django 1 11 项目 当我启动应用程序时 我看到以下错误 无效的 HTTP HOST 标头 bla bla bla bla bla vla com 您可能需要将 u bla bla bla bla bla
  • 如何根据 iPhone 中的文本大小动态增加按钮宽度?

    我以编程方式创建了 10 个按钮 并在按钮中设置了标题 现在我想动态增加按钮框架大小 它取决于文本 我给出了一些条件并设置了框架大小 但我如何设置确切的帧大小取决于文本 动态获取文本 我的示例代码是 float x 0 y 0 w h 20
  • 在其间至少有 X 间隙长度的区域中生成点

    我试图想出一种在给定区域 在我的例子中是一个正方形 中生成 X 个随机点的方法 造成这个问题的一件事是每个点必须距离所有其他点至少 Y 个单位 首先想到的是 在 c 中 检查新点与所有现有点之间的距离 while points Count
  • 使用虚函数而不是IF语句更快?

    我记得在网上读到过 在极低延迟的情况下 最好使用虚拟函数来代替 IF 语句 这是真的 他们基本上是说动态多态性对于速度情况更好吗 是否有用户可以分享其他 C 低延迟 怪癖 我非常怀疑单个 if else 语句会比使用虚拟函数慢 虚拟函数通常
  • Google Geocode API 经度和纬度不适用于 zip 96101

    I am using google geocode api https developers google com maps documentation geocoding intro https developers google com
  • 具有异步等待任务组的最大线程数

    我的目的是了解 Swift 5 5 使用的 协作线程池 async await 以及任务组如何自动约束并发程度 考虑以下任务组代码 并行执行 32 个计算 func launchTasks async await withTaskGroup
  • 如何使用 Xdocument 将 xml 元素值转换为字符串

    我将 xml 存储在字符串中 并使用 Xdocument 将字符串解析为 xml 从中我需要获取 xml 元素值 并使用该值将其插入到数据库中 任何帮助 将不胜感激 XML
  • vim 一次选择/编辑多个非连续行

    我有一个带有字符串的文件 8 deb http ftp de debian org debian stable main contrib non free 9 deb http ftp de debian org debian stable
  • WebView 未正确显示

    WebView未正确显示网站 任何帮助都会很棒 我使用的代码在所有其他网站上都有效 不确定是什么问题 有什么我应该补充的吗 在 Chrome 和其他浏览器中运行良好 所以不知道该怎么做 任何帮助都会很棒 WebView Chrome pub
  • ValueError:负数不能求小数次方

    当我在终端尝试这个时 gt gt gt 3 66 26 32 0 2 我收到以下错误 Traceback most recent call last File
  • 将 VarBinary RTF blob 转换为 MS SQL 中的文本

    我正在使用 SQL Server 2008 Column Datatype VarBinary RTF 文件被压缩并保存到此 varbinary 列 现在如何使用 SQL 访问和查看 RTF 文件中的数据 它返回这个 弰巎楛 etc 此处尝
  • 带有 JSON 的范围对象

    我正在编写一个 Chrome 扩展程序 我需要将用户在网站上选择的值传递到我的服务器 我正在使用返回范围对象的代码 window getSelection 我正在使用 JSON 将范围对象传递回我的服务器 但它不起作用 我对此很陌生 但我认
  • C# 无法获取某些客户端计算机名称

    我使用下面的代码来获取客户端计算机名称 但是它适用于某些客户端 而某些客户端会出现错误 string IPAdd Request UserHostName IPHostEntry hostEntry Dns GetHostEntry IPA
  • IIS 上的 django,进程意外退出

    我已经阅读了关于该主题的所有文章 但我仍然无法在 IIS 上运行 django 项目 错误消息为 500 Internal Server Error c program files x86 python 3 5 python exe Fas
  • 如何更改 WPF 中绑定选项的默认值?

    在我当前的项目中 我使用了几个文本框控件 其内容由来自数据库的对象填充 该对象使用验证来验证文本的正确插入 当我想显示验证错误 即文本有很多字符 时 我必须向文本属性添加一些绑定选项 如下行所示
  • 删除 json_encode() 中的双引号

    我想删除 json encode 中的双引号 这是我的代码
  • 如何使用 Python 多线程处理 MySQL 连接

    我有一个主要的 Python 脚本 它连接到 MySQL 数据库并从中提取一些记录 根据返回的结果 它会启动与抓取的记录一样多的线程 类实例 每个线程都应该返回数据库并通过将一个状态标志设置为不同的状态 进程已启动 来更新另一个表 为了实现