Python批量造数并利用pymysql写入到数据库之multiprocessing多进程、threading多线程实现方式(学习笔记)


1.导包

import random
import string
import pymysql
import time
import multiprocessing  # multiprocessing包是Python中的多进程管理包,支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件
import threading    # threading模块中包含了关于线程操作的丰富功能,包括:常用线程函数,线程对象,锁对象,递归锁对象,事件对象,条件变量对象,信号量对象,定时器对象,栅栏对象。

2.造数--生成要写入数据库的数据

#   数据生成部分------------公共------------------------------------------------------------------------------------------------------------------------------(始)
class CreateData(object):
    # 获取姓名
    def get_name(self):
        # 打开文件‘金庸小说人物14部1420人.txt’、‘古龙小说人物男.txt’、‘金庸小说人物女.txt’读取为UTF-8格式;(注:本地txt文件内的人物名之间必须以英文逗号,隔开,不换行,无其它符号)
        fp = open("D:\my_python\Scripts\ProjectFile\其他\金庸小说人物14部1420人.txt", "r", encoding="UTF-8")
        names_1 = fp.read().split(',')   # 读取文件全部内容,并切割成列表
        return random.choice(names_1)  # 从姓名列表names_1中随机选取一个元素(姓名)并返回
        fp.close()
    # 获取性别
    def get_sex(self):
        return random.choice(["男","女"])  # random.randint()的参数应该是一个整数,而不是一个列表,可以将代码修改为:random.choice()
    # 获取年龄
    def get_age(self):
        return random.randint(18,75)
    # 获取电话
    def get_tel(self):
        get_tel = '131'
        for i in range(8):
            get_tel += str(random.randint(0, 9))
        return get_tel
    # 获取邮件
    def get_emailn(self):
        str_char = ""
        get_char = string.ascii_letters + string.digits  # +string.punctuation  # 随机选值的容器:数字、大小写、符号
        get_len = random.randint(4, 6)  # 定义随机的4~6位数字
        for i in range(1, get_len + 1):
            str_char += random.choice(get_char)
        return str_char
    def get_email(self):
        return self.get_emailn() + random.choice(["@163.com", "@126.com", "@gmail.com","@outlook.com","@my.com"])  # 此处调用get_email1方法
    # 声明一个方法,可以使一条数据放在一个列表
    def get_one_data(self):
        # 此处返回的数据顺序最好与创建表时的结构顺序一致,以便插入数据时一一对应
        return [self.get_name(),self.get_sex(),self.get_age(),self.get_tel(),self.get_email()]
# # 测试代码
# if __name__ == "__main__":
#     data = CreateData()  # 实例化类方法
#     print("姓名:",data.get_name())
#     print("性别:",data.get_sex())
#     print("年龄:",data.get_age())
#     print("电话:",data.get_tel())
#     print("邮件:",data.get_email())
#
#   数据生成部分------------公共------------------------------------------------------------------------------------------------------------------------------(止)

2.1.生成姓名需要的txt文件(复制内容到新建文件保存为txt文本),复制文件所在路径到代码中,要绝对路径,否则可能无法读取


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Python中,多线写入数据库可以通过使用线程池来实现。下面是一个示例代码,演示了如何使用多线程同时写入数据库: ```python import threading import pymysql def write_to_database(data): # 连接数据库 conn = pymysql.connect(host='localhost', user='username', password='password', database='dbname') cursor = conn.cursor() # 执行插入操作 try: # 根据需要执行SQL语句,这里以插入操作为例 sql = "INSERT INTO table_name(column1, column2) VALUES (%s, %s)" cursor.execute(sql, (data['value1'], data['value2'])) conn.commit() print(f"Data {data} inserted successfully.") except Exception as e: conn.rollback() print(f"Error occurred while inserting data {data}: {e}") finally: # 关闭数据库连接 cursor.close() conn.close() # 创建数据列表 data_list = [ {'value1': 'data1', 'value2': 'data2'}, {'value1': 'data3', 'value2': 'data4'}, {'value1': 'data5', 'value2': 'data6'}, # 可以继续添加更多的数据 ] # 设置线程池大小 thread_pool_size = 5 # 创建线程池 thread_pool = [] # 创建线程并启动 for data in data_list: thread = threading.Thread(target=write_to_database, args=(data,)) thread_pool.append(thread) thread.start() # 等待所有线程执行完毕 for thread in thread_pool: thread.join() print("All threads have finished writing to the database.") ``` 在上述代码中,我们首先定义了一个`write_to_database`函数,用于执行数据库写入操作。然后,我们创建了一个数据列表,其中包含要写入数据库的数据。接下来,我们设置了线程池的大小,并创建了一个空的线程池列表。然后,我们使用循环创建线程,并将每个线程添加到线程池中。最后,我们使用`join`方法等待所有线程执行完毕。 请注意,在多线写入数据库时,需要确保数据库连接和游标对象的正确使用和关闭。此外,如果多个线程同时写入相同的数据库表,可能会出现竞态条件或锁问题,需要根据具体情况考虑使用适当的并发控制机制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

兲人有恏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值