当前位置: 首页 > news >正文

redis多线程操作

今天更新一个redis多线程操作, 可直接搬运

import redis, os, threading, queue
import pandas as pd# 创建一个任务队列
task_queue = queue.Queue()def read_excel(folder_path):total_list = []for filepath, dirnames, filenames in os.walk(folder_path):for filename in filenames:file_path = os.path.join(filepath, filename)df_total = pd.read_excel(file_path)list_df = df_total['product'].values.tolist()total_list.extend(list_df)print(total_list)print(len(total_list))result_list = []for t_pro in total_list:t_pro_dict = {t_pro: '20230907'}result_list.append(t_pro_dict)# # 写入 redis# redis_obj = RedisClass('ahrefs_filter', 9)# for t_pro in total_list:# 	t_pro_dict = {t_pro: '20230907'}# 	print(t_pro_dict)# 	redis_obj.insert_redis(t_pro_dict)return result_listclass RedisClass:def __init__(self, db_key, db_index, db_host='*.*.*.*', db_port=6379, db_password='password', filter_start_index=0, filter_end_index=0):# 传入DB表名,和DB序号self.db_key = db_keyself.db_index = db_indexself.db_host = db_hostself.db_port = db_portself.db_password = db_passwordself.filter_start_index = filter_start_indexself.filter_end_index = filter_end_indexself.redis_pool = redis.ConnectionPool(host=self.db_host, port=self.db_port, password=self.db_password,db=self.db_index)self.redis_conn = redis.Redis(connection_pool=self.redis_pool)def count_redis_data(self):# 计数: 获取redis中数据数量return self.redis_conn.zcard(self.db_key)def read_redis(self):# 读取redis中全部数据if self.filter_start_index == 0 and self.filter_end_index == 0:# 如果无输入查询数量, 则全表查询self.filter_end_index = self.redis_conn.zcard(self.db_key)print('查询到的数量为: {}'.format(self.filter_end_index))res_list = self.redis_conn.zrange(self.db_key, self.filter_start_index, self.filter_end_index)return [res.decode('utf-8') for res in res_list]def read_redis_by_score(self, zset_score):# 读取redis中全部数据res_list = self.redis_conn.zrangebyscore(self.db_key, zset_score, zset_score)return [res.decode('utf-8') for res in res_list]def insert_redis(self, redis_dict):flag = Falseself.redis_conn.zadd(self.db_key, redis_dict)return flag# 生产者线程类
class ProducerThread(threading.Thread):def __init__(self, mysql_pro_info):super().__init__()self.mysql_pro_info = mysql_pro_infodef run(self):for item in self.mysql_pro_info:task_queue.put(item)print(f"Produced by {self.name}: {item}")class ConsumerThread(threading.Thread):def run(self):redis_obj = RedisClass('ahrefs_filter', 9)while True:item = task_queue.get()print(item)redis_obj.insert_redis(item)if __name__ == '__main__':# 1- 读取EXCEL中的数据, 存入redisfolder_path = r'C:\Users\admin\Desktop\0905型号'total_list = read_excel(folder_path)producer_thread = ProducerThread(total_list)producer_thread.start()for i in range(100):  # 创建100个消费者线程consumer_thread = ConsumerThread()consumer_thread.start()
http://www.lryc.cn/news/157538.html

相关文章:

  • OpenCV(十七):拉普拉斯图像金字塔
  • OpenCL编程指南-10.2使用C++包装器API的矢量相加示例
  • mysql数据库,字符串使用双引号““导致报错,使用单引号‘‘不报错,Unknown column ‘user-test‘ in ‘where clause‘
  • [华为云云服务器评测] 华为云耀云服务器 Java、node环境配置
  • 中企绕道突破封锁,防不胜防 | 百能云芯
  • 动手实践:从栈帧看字节码是如何在 JVM 中进行流转的
  • PEX装机
  • 异地远程访问内网BUG管理系统【Cpolar内网穿透】
  • 论文笔记:一分类及其在大数据中的潜在应用综述
  • 下单时如何保证数据一致性?
  • 【C++ Core Guidelines解析】深入理解现代C++的特性和原理
  • Go语言高阶:Reflection反射与Files操作 详细示例教程
  • 谷歌seo技术流
  • ReactiveUI MVVM框架(1)-Collections
  • 【微服务】五. Nacos服务注册
  • Lnmp架构-Redis
  • Python 二进制数据处理与转换
  • 【LeetCode】297.二叉树的序列化与反序列化
  • Java HashSet
  • 在iPhone上构建自定义数据采集完整指南
  • Android MediaRecorder录音
  • 软件提示vcruntime140_1.dll丢失的解决方法,以及丢失的原因总结
  • Datax抽取mysql的bit类型数据
  • git 后悔药
  • vue-cli搭建一个新项目及基础配置
  • 【C++】 C++11(右值引用,移动语义,bind,包装器,lambda,线程库)
  • 附录1-爬虫的一些技巧
  • 【android12-linux-5.1】【ST芯片】【RK3588】【LSM6DSR】HAL移植
  • DragGAN应运而生,未来在4G视频上都可能利用拖拽式编辑
  • 【C++技能树】多态解析